2016-02-24 21:04:01 jly58fgjk 阅读数 3027

学习了数字图像图像处理一段时间,下面是我对预处理方面的一些总结。

首先,了解了预处理对数字图像有什么影响?

预处理的主要目的是消除图像中无关的信息,恢复有用的真实信息,增强有关信息的可检测性和最大限度地简化数据,从而改进特征抽取、图像分割、匹配和识别的可靠性。预处理过程一般有数字化、几何变换、归一化、平滑、复原和增强等步骤。下面是我对图像增强的总结。

图像增强有很多种方法,针对不同图像要采取不同的方法,直方图均衡化、对比度拉伸是常用到的方法,使灰度图像颜色更加分明,针对含有噪声的图像。可以采用滤波,包含平滑滤波和锐化滤波。

一、直方图处理

1、直方图均衡化

直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。

它的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展像原取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。直方图均衡化是一种对图像的非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。

       函数:histeq

实现代码如下:I=imread('2.jpg');
                               I=rgb2gray(I);
                             %K=16; 
                            %H=histeq(I,K); 
                            H=histeq(I);

                    figure,,imshow(H); 

2、对比度拉伸   

函数:imadjust

代码例如:

I=imadjust(I2,stretchlim(I2),[0,1]);

二、滤波法

均值滤波

均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。

模板有3*3、5*5、7*7三种。

实现代码如下:

clc;clear;close all;
img=rgb2gray(imread('lena1.jpg'));
figure;imshow(img);  
img_noise=double(imnoise(img,'gaussian',0.006));%添加高斯噪声 
figure,imshow(img_noise,[]); 
img_mean=imfilter(img_noise,fspecial('average',3)); %均值模板3*3
figure;imshow(img_mean,[]);title('de-noise by mean filter');
imag_mean=exp(imfilter(log(img_noise),fspecial('average',5)));%模板5*5 
figure;imshow(img_mean,[]),title('de-noise by mean filter');
Q=-1.5;  
img_mean=imfilter(img_noise.^(Q+1),fspecial('average',3))./imfilter(img_noise.^Q,fspecial('average',3)); 
figure;imshow(img_mean,[]);title('de-noise by mean filter'); 
Q=1.5;  img_mean=imfilter(img_noise.^(Q+1),fspecial('average',3))./imfilter(img_noise.^Q,fspecial('average',3)); 
figure;imshow(img_mean,[]);title('de-noise by mean filter');

中值滤波

中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为3*3,5*5区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。

实现代码如下:

img_median=medfilt2(img_noise);%中值滤波 
      figure;imshow(img_median,[]);title('de-noise by median filter')%中值滤波结果; 
     img_median2=medfilt2(img_midian); 
     figure;imshow(img_median2,[]);title('de-noise by median filter');

上述两种为平滑滤波

锐化滤波

  锐化用于补偿和增加图像的高频成分,使图像中的地物边界、区域边缘、线条、纹理特征和精细结构特征等更加清晰、鲜明。

利用算子prewitt、sobert、拉普拉斯算子实现

clc;clear;close all;
I=imread('lena.jpg');
%I=rgb2gray(I); 
subplot(221),imshow(I); title('原图');
hs=fspecial('sobel');
S=imfilter(I,hs);
hp=fspecial('prewitt'); 
P=imfilter(I,hs); 
A=double(I);%双精度型  
H=[0 1 0,1 -4 1,0 1 0];%拉普拉斯算子 
J=conv2(I,H,'same'); 
K=I-J;  
subplot(222),imshow(J); title('拉普拉斯锐化图像');
subplot(223),imshow(S); title('sobel算子锐化图像');
subplot(224),imshow(P); title('prewitt算子锐化图像');


低通滤波(平滑)

下面为巴特沃斯低通滤波的实现代码:

clc;clear;close all;
I=imread('lena1.jpg');
I=rgb2gray(I);
figure,imshow(I);
I1=fftshift(fft2(I));
[M,N]=size(I1);
n=2;d0=30;
n1=floor(M/2);
n2=floor(N/2);
for i=1:M
    for j=1:N
        d=sqrt((i-n1)^2+(j-n2)^2);
        H=1/(1+(d/d0)^(2*n));
        I2(i,j)=H*I1(i,j);
    end
end
I2=ifftshift(I2);
I3=real(ifft2(I2));
figure,imshow(I3,[]);

高通滤波(锐化)

下面代码为巴特沃斯高通滤波的实现代码:

clc;clear;close all;
f1=imread('lena1.jpg');
f1=rgb2gray(f1);
F= double(f1);     % 数据类型转换,MATLAB不支持图像的无符号整型的计算  
G = fft2(F);        % 傅立叶变换   
G = fftshift(G);     % 转换数据矩阵  
[M,N]=size(G);    
nn = 2;           % 二阶巴特沃斯(Butterworth)高通滤波器  
d0 = 5;  
m = fix(M/2);  
n = fix(N/2);  
for i = 1 : M       
    for j = 1 : N     
        d = sqrt((i-m)^2+(j-n)^2);   
        if (d == 0)      
             h = 0;   
        else
            h=1/(1+0.414*(d0/d)^(2*nn));% 计算传递函数   
        end;      
        result(i,j) = h * G(i,j);     
    end;  
end; 
result = ifftshift(result);   
J2= ifft2(result); 
J3= uint8(real(J2));
subplot(121);imshow(f1); title('灰色图像'); 
subplot(122);imshow(J3);  % 滤波后图像显示
title('滤波后的图像');

高斯滤波

部分代码:

%gaussian低通滤波
H=fspecial('gaussian',7,3);
F{2}=double(filter2(H,I));
figure,imshow(F{2},[]);


滤波部分实现代码网址

http://wenku.baidu.com/link?url=3U5MZxgxbursdIBYSVden1i8rxSxFlBaf_glnibz8Me2hG6vADZz5419XQIRlc5OrpGM8uibQI_siBwoiFvaDVPM1ewwgRV48voh7sgIoIi

http://wenku.baidu.com/link?url=esi3wmkrucc4k3lbHFtSGL2OWFMjZwz_hoB_aQQh6GiXDwxni9GFnMGhJVOWgBa6Ulm3Vf1qB0auBjKRyCY_EBKPpgMZphXeovcTRG1WyHK


 

2008-12-23 19:11:00 afei8612 阅读数 1809

 

图像预处理

image preprocessing

  在图像分析中,对输入图像进行特征抽取、分割和匹配前所进行的处理。图像预处理的主要目的是消除图像中无关的信息,恢复有用的真实信息,增强有关信息的可检测性和最大限度地简化数据,从而改进特征抽取、图像分割、匹配和识别的可靠性。预处理过程一般有数字化、几何变换、归一化、平滑、复原和增强等步骤。

  数字化  一幅原始照片的灰度值是空间变量(位置的连续值)的连续函数。在M×N点阵上对照片灰度采样并加以量化(归为2b个灰度等级之一),可以得到计算机能够处理的数字图像。为了使数字图像能重建原来的图像,MNb值的大小就有一定的要求。在接收装置的空间和灰度分辨能力范围内,MN b的数值越大,重建图像的质量就越好。当取样周期等于或小于原始图像中最小细节周期的一半时,重建图像的频谱等于原始图像的频谱,因此重建图像与原始图像可以完全相同。由于MN b三者的乘积决定一幅图像在计算机中的存储量,因此在存储量一定的条件下需要根据图像的不同性质选择合适的MN b值,以获取最好的处理效果。

  几何变换  用于改正图像采集系统的系统误差和仪器位置的随机误差所进行的变换。对于卫星图像的系统误差,如地球自转、扫描镜速度和地图投影等因素所造成的畸变,可以用模型表示,并通过几何变换来消除。随机误差如飞行器姿态和高度变化引起的误差,难以用模型表示出来,所以一般是在系统误差被纠正后,通过把被观测的图和已知正确几何位置的图相比较,用图中一定数量的地面控制点解双变量多项式函数组而达到变换的目的。

  归一化  使图像的某些特征在给定变换下具有不变性质的一种图像标准形式。图像的某些性质,例如物体的面积和周长,本来对于坐标旋转来说就具有不变的性质。在一般情况下,某些因素或变换对图像一些性质的影响可通过归一化处理得到消除或减弱,从而可以被选作测量图像的依据。例如对于光照不可控的遥感图片,灰度直方图的归一化对于图像分析是十分必要的。灰度归一化、几何归一化和变换归一化是获取图像不变性质的三种归一化方法。

  平滑  消除图像中随机噪声的技术。对平滑技术的基本要求是在消去噪声的同时不使图像轮廓或线条变得模糊不清。常用的平滑方法有中值法、局部求平均法和k 近邻平均法。局部区域大小可以是固定的,也可以是逐点随灰度值大小变化的。此外,有时应用空间频率域带通滤波方法。

  复原  校正各种原因所造成的图像退化,使重建或估计得到的图像尽可能逼近于理想无退化的像场。在实际应用中常常发生图像退化现象。例如大气流的扰动,光学系统的像差,相机和物体的相对运动都会使遥感图像发生退化。基本的复原技术是把获取的退化图像g(xy)看成是退化函数h(xy)和理想图像f(xy)的卷积。它们的傅里叶变换存在关系 G(uvH(uv)F(uv)。根据退化机理确定退化函数后,就可从此关系式求出F(uv),再用傅里叶反变换求出f(xy)。通常把 称为反向滤波器。实际应用时,由于H(uv)随离开uv平面原点的距离增加而迅速下降,为了避免高频范围内噪声的强化,当u2+v2大于某一界限值W娿时,使M(uv)等于1W0的选择应使H(uv) u2+v2≤W娿范围内不会出现零点。图像复原的代数方法是以最小二乘法最佳准则为基础。寻求一估值弮,使优度准则函数值最小。这种方法比较简单,可推导出最小二乘法维纳滤波器。当不存在噪声时,维纳滤波器成为理想的反向滤波器。

  增强  对图像中的信息有选择地加强和抑制,以改善图像的视觉效果,或将图像转变为更适合于机器处理的形式,以便于数据抽取或识别。例如一个图像增强系统可以通过高通滤波器来突出图像的轮廓线,从而使机器能够测量轮廓线的形状和周长。图像增强技术有多种方法,反差展宽、对数变换、密度分层和直方图均衡等都可用于改变图像灰调和突出细节。实际应用时往往要用不同的方法,反复进行试验才能达到满意的效果。

 

2019-10-28 21:26:43 sinat_31608641 阅读数 126

1、图像预处理,包括高斯滤波,图像去噪,图像增强等

2、图像分割

3、孔洞填充

4、连通域标记

5、特征提取


6、结果输出

 

图像的预处理

为了方便计算,系统通常将获取的图片灰度化。将彩色图像转化成为灰度图像的过程就称为图像的灰度化处理。彩色图像中R、G、B三个分量的值决定了具体的像素点。一个像素点可以有上千万种颜色。而灰度图像是一种彩色图像,但是它的特点在于R、G、B三个分量具体的值是一致的。灰度图中每个像素点的变化区间是0到255,由于方便计算,所以在实际工程处理中会先将各种格式的图像转变成灰度图像。在保留图像轮廓和特征的基础上,灰度图仍然能够反映整幅图像轮廓和纹理。在Opencv里面有实现图像灰度化的接口。调用OpenCV中的cvSmooth函数进行中值滤波处理,以去除细小毛刺。

图像二值化

局部自适应二值化是针对灰度图像中的每一个像素逐点进行阈值计算,它的阈值是由像素的邻域内的点的局部灰度特性和像素灰度值来确定的。局部阈值法是逐个计算图像的每个像素灰度级,保存了图像的细节信息,非均匀光照条件等情况虽然影响整个图像的灰度分布,却不影响局部的图像性质,但也存在缺点和问题,相比全局阈值法来说,它的计算时间较长,但适用于多变的环境。

 缺陷检测六大基本方法
1. blob + 特征
2. blob + 特征+ 差分
3. 频域 + 空间域
4. 光度立体法
5. 特征训练(分类器,机器学习)
6. 测量

参考:

https://blog.csdn.net/lvquanye9483/article/details/81585496

2018-05-04 15:00:21 jyy555555 阅读数 774

在训练之前完成图像预处理,包括图像片段截取、图像大小调整、图像翻转以及色彩调整的步骤。

图像预处理程序如下:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

#给定一张图像,随机调整图像的色彩。因为调整亮度、对比度、饱和度和色相的顺序会影响最后得到的结果,所以可以定义多种不同的顺序。具体
#哪一种顺序可以在训练数据预处理时随机的选择一种。这样可以进一步降低无关因素对模型的影响。这里给出其中的四种处理顺序。
def distort_color(image,color_ordering=0):
	if color_ordering==0:
		image=tf.image.random_brightness(image,max_delta=32./255.)
		image=tf.image.random_saturation(image,lower=0.5,upper=1.5)
		image=tf.image.random_hue(image,max_delta=0.2)
		image=tf.image.random_contrast(image,lower=0.5,upper=1.5)
	elif color_ordering==1:
		image=tf.image.random_saturation(image,lower=0.5,upper=1.5)
		image=tf.image.random_hue(image,max_delta=0.2)
		image=tf.image.random_brightness(image,max_delta=32./255.)
		image=tf.image.random_contrast(image,lower=0.5,upper=1.5)
	elif color_ordering==2:
		image=tf.image.random_hue(image,max_delta=0.2)
		image=tf.image.random_brightness(image,max_delta=32./255.)
		image=tf.image.random_saturation(image,lower=0.5,upper=1.5)
		image=tf.image.random_contrast(image,lower=0.5,upper=1.5)
	elif color_ordering==3:
		image=tf.image.random_contrast(image,lower=0.5,upper=1.5)
		image=tf.image.random_brightness(image,max_delta=32./255.)
		image=tf.image.random_saturation(image,lower=0.5,upper=1.5)
		image=tf.image.random_hue(image,max_delta=0.2)
		
	#将图像元素值归一化到0.0~1.0
	return tf.clip_by_value(image,0.0,1.0)
	
#给定一张解码后的图像、目标图像的尺寸以及图像上的标注框,此函数可以对给出的图像进行预处理。这个函数的输入图像是图像识别问题中原始
#的训练图像,而输出则是神经网络模型的输入层。这里只处理模型的训练数据,对于预测的数据,一般不需要使用随机变换的步骤。
def preprocess_for_train(image,height,width,bbox):
	#如果没有提供标注框,则认为整个图像就是需要关注的部分
	if bbox is None:
		bbox=tf.constant([0.0,0.0,1.0,1.0],dtype=tf.float32,shape=[1,1,4])
		
	#转换图像张量的类型
	if image.dtype !=tf.float32:
		image=tf.image.convert_image_dtype(image,dtype=tf.float32)
		
	#随机截取图像,减小需要关注的物体大小对图像识别算法的影响
	bbox_begin,bbox_size,_=tf.image.sample_distorted_bounding_box(tf.shape(image),bounding_boxes=bbox)
	distorted_image=tf.slice(image,bbox_begin,bbox_size)
	#将随机截取的图像调整为神经网络输入层的大小。大小调整的算法是随机选择的。
	distorted_image=tf.image.resize_images(distorted_image,size=[height,width],method=np.random.randint(4))
	#随机左右翻转图像
	distorted_image=tf.image.random_flip_left_right(distorted_image)
	#使用一种随机的顺序调整图像色彩
	distorted_image=distort_color(distorted_image,np.random.randint(4))
	return distorted_image

#读取图像的原始数据	
image_raw_data=tf.gfile.FastGFile(r'f:\path\to\picture.jpg','rb').read()
with tf.Session() as sess:
	#将图像使用jpeg的格式解码从而得到图像对应的三维矩阵
	img_data=tf.image.decode_jpeg(image_raw_data)
	#给定图像的标注框
	boxes=tf.constant([[[0.05,0.05,0.9,0.7],[0.35,0.47,0.5,0.56]]])
	
	#运行6次获得6种不同的图像
	for i in range(6):
		#将图像的尺寸调整为150x150
		result=preprocess_for_train(img_data,150,150,boxes)
		#使用pyplot工具可视化得到的图像。
		plt.imshow(result.eval())
		plt.show()
	
	
	

2018-05-22 11:26:41 mrahut 阅读数 1961

      图像的预处理在数字图像中占了很重要的地位,图像质量的好坏,直接影响了后面我们的分析,例如分类、识别、分割等,但是大多数人往往只关注后面的核心部分,很少关心前面的预处理,以为只要简单的几个与处理步骤就行了,殊不知预处理才是我们建高楼大厦的基础,才是重中之重。而且预处理涉及的内容太多,要想充分掌握必须得花很大的功夫。因此我总结了预处理的知识,如果不足的,后面遇到会补充进来的。在进行预处理之前简单介绍下数据类型的应用。

  1. 数据类型概述

      众所周知,matlab的数据类型有很多,但是我们只介绍我们常用的数值类型,uint8(无符号整型)、double(双精度浮点型)。uint8(无符号整型)属于8位无符号,占1字节;double(双精度浮点型)属于64位,占8个字节。因此matlab在存储图像时,是采用

uint8数据类型,这样能够节省存储空间。但是matlab默认的数值类型一般是double,因此在进行运算的时候我们需要使用double类型。

      只需记住一般我们显示图像的时候用uint8类型,在具体图像矩阵操作的时候需要用double。所以一般在进行图像操作时有一个归一化处理,即是起这样的作用。

   

没有更多推荐了,返回首页