《图像处理与机器视觉》作业姓名:学号:专业:测试计量技术及仪器时间:2016年4月作业一:图像增强1、图像灰度变换。
对图像(见图1)进行对比度拉伸,通过直方图获取灰度分布的最小、最大值。
图1 灰度拉伸算法描述:直方图均衡化是灰度变换的一个重要应用,它广泛应用在图像增强处理中。
可以产生一幅灰度级分布具有均匀概率密度的图像,扩展了像素取值的动态范围。
由于许多图像的灰度值是非均匀分布的,而且灰度值集中在一个小区间内的图像也是很常见的。
直方图均衡化就是一种通过重新均匀地分布各灰度值来增强图像对比度的方法。
直方图均衡化处理是以累积分布函数(Cumulative Distri-bution Function- CDF )为基础的直方图修改法。
直方图均衡化的目的是将原始图像的直方图变为均衡分布的形式,即将一已知灰度概率密度分布的图像,经过某种变换,变成一幅具有均匀灰度概率密度分布的新图像。
源程序:clear;clc;close;I=imread('E:\学习\图像处理与机器视觉\灰度变换.bmp');%读取图像[m,n,o]=size(I);grayPic=rgb2gray(I);figure,imshow(I);figure,imshow(grayPic);gp=zeros(1,256); %计算各灰度出现的概率for i=1:256gp(i)=length(find(grayPic==(i-1)))/(m*n);endfigure,bar(0:255,gp);title('原图像直方图');xlabel('灰度值');ylabel('出现概率');newGp=zeros(1,256); %计算新的各灰度出现的概率S1=zeros(1,256);S2=zeros(1,256);tmp=0;for i=1:256tmp=tmp+gp(i);S1(i)=tmp;S2(i)=round(S1(i)*256);endfor i=1:256newGp(i)=sum(gp(find(S2==i)));endfigure,bar(0:255,newGp);title('均衡化后的直方图');xlabel('灰度值');ylabel('出现概率');newGrayPic=grayPic; %填充各像素点新的灰度值for i=1:256newGrayPic(find(grayPic==(i-1)))=S2(i);endfigure,imshow(newGrayPic);处理结果及分析:运行以上代码后,matlab出来的图像如下图1.1和图1.2所示:图1.1 原图像及其直方图图1.2 直方图均衡化后的图像及其直方图从上图中可以看出,图像灰度的最大值为250,最小为0,用直方图均衡化后,图像的直方图的灰度间隔被拉大了,均衡化的图像的一些细节显示了出来,这有利于图像的分析和识别。
直方图均衡化就是通过变换函数histeq将原图的直方图调整为具有“平坦”倾向的直方图,然后用均衡直方图校正图像。
2、(选作)设计K近邻均值(中值)滤波器,给出图像(见图)处理结果。
1) 以待处理像素为中心,作一个m*m的作用模板。
2)在模板中,选择K个与待处理像素的灰度差为最小的像素。
3)将这K个像素的灰度均值(中值)替换掉原来的像素值。
图2 图像滤波算法描述:邻近均值滤波,即中值滤波(Median filtering)是一种非常有用的非线性信号处理方法,在一定程度上可以克服采用诸如邻域均值滤波等线性低通滤波器消除噪声时,会将图像边缘模糊掉的缺点。
中值滤波尤其对图像中的脉冲噪声、扫描噪声等能有良好的去除效果,但是对含有过多细节的图像,处理效果一般不好。
中值滤波器根据器计算方法,可以称为非线性滤波器中的排序统计滤波器,它不是简单的加权求和,而是先把邻域像素按灰度级进行排序,然后再选择该组的中值作为模板输出结果。
由于中值滤波在算法设计上使与周围像素灰度级相差较大的点处理后能和周围的像素值比较接近,因此可以衰减随机噪声,尤其是脉冲噪声等。
但由于不是简单的取均值,因此产生的模糊要少得多。
图2.1为中值滤波器得一维应用示例,其中图(a)为一叠加有1/4采样频率正弦震荡得离散信号序列,在3点邻域中进行中值滤波,在得到得处理结果(b)中,完全消除了正弦波的干扰,而且保留了边界。
(a)(b)图2.1 中值滤波中值滤波由于需要对邻域所有像素按灰度级进行排序之后得到模板输出结果,因此在计算速度上要比模板卷积慢。
为了加快处理速度,在程序设计时采用“冒泡”排序法排序。
选用函数medfilt2,b=medfilt2(a,[m,n]);b是中值滤波后的图象矩阵,a是原图矩阵,m和n是处理模版大小,默认3×3源程序:clear;clc;close;%medfilt2函数Y=imread('E:\学习\图像处理与机器视觉\图像滤波.bmp');%读取图像H=medfilt2(Y,[2 2]);subplot(1,2,1),imshow(Y),title('原图')subplot(1,2,2),imshow(H),title('中值滤波后的效果图');figure,imshow(newGrayPic);处理结果及分析:当选2×2时,处理结果为:图2.2 中值滤波2*2效果图当选3×3时,处理结果为:图2.3 中值滤波3*3效果图当选7×7时,处理结果为:图2.4 中值滤波7*7效果图由上可知,经过中值滤波后图像变得更加清晰可见。
并且函数medfilt2中,M*M选取并不是越大越好,也不是越小越好,从而要选取适当的值。
用matlab编写的中值滤波算法程序:clear;clc;close;X=imread('E:\学习\图像处理与机器视觉\图像滤波.bmp ');Y=uint8(X); %把x转换成8位的无符号整形数据。
U1 = imnoise(Y,'salt & pepper', 0.02);subplot(1,2,1),imshow(uint8(U1)),title('原图');p=size(U1);x1=double(U1);x2=x1;n=3; %模板n*n.for i=1:p(1)-n+1for j=1:p(2)-n+1c=x1(i:i+(n-1),j:j+(n-1)); %取出x1中从(i,j)开始的n行n列元素,即模板(n×n的)e=c(1,:); %是c矩阵的第一行for u=2:ne=[e,c(u,:)]; %将c矩阵变为一个行矩阵endmm=median(e); %mm是中值x2(i+(n-1)/2,j+(n-1)/2)=mm; %将模板各元素的中值赋给模板中心位置的元素endend%未被赋值的元素取原值D=uint8(x2);subplot(1,2,2),imshow(uint8(D)),title('中值滤波后的效果图');处理结果如下图:图2.5中值滤波处理效果图从处理结果看出,用matlab函数medfilt2和自己编写的程序,能达到同样的效果。
作业二:图像变换1、对图像(见图)用FFT算法从空域变换到频域;显示幅度频谱,使图像能量中心移到几何中心。
将图像旋转450,再显示幅度频谱。
图 3 图像变换算法描述:傅立叶变换是数字图像处理中应用最广的一种变换,其中图像增强、图像复原和图像分析与描述等,每一类处理方法都要用到图像变换,尤其是图像的傅立叶变换。
图像的频域增强,常用的图像增强技术可分为基于空域和基于变换域的两类方法。
最常用的变换域是频域空间。
在频域空间,图像的信息表现为不同频率分量的组合。
如果能让某个范围内的分量或某些频率的分量受到抑制而让其他分量不受影响,就可以改变输出图像的频率分布,达到不同的增强目的。
频域增强的工作流程:频域空间的增强方法对应的三个步骤:(1) 将图像f(x,y)从图像空间转换到频域空间,得到F(u,v);(2) 在频域空间中通过不同的滤波函数H(u,v)对图像进行不同的增强,得到G(u,v)(注:不同的滤波器滤除的频率和保留的频率不同,因而可获得不同的增强效果);(3) 将增强后的图像再从频域空间转换到图像空间,得到图像g(x,y)。
将图像由空域转换到频域,理论基础是傅里叶变换,要在数字图像处理中应用傅立叶变换,还需要解决两个问题:一是在数学中进行傅立叶变换的f(x)为连续(模拟)信号,而计算机处理的是数字信号(图像数据);二是数学上采用无穷大概念,而计算机只能进行有限次计算。
通常,将受这种限制的傅立叶变换称为离散傅立叶变换(Discrete Fourier Transform ,DFT)。
设{f(x)|f(0),f(1), f(2),…, f(N-1)}为一维信号f(x)的N 个抽样,其离散傅立叶变换对为:式中:x ,u=0, 1, 2, …, N -1。
旋转图像函数imrotate ,如 J = imrotate(I,45,'bilinear','crop'); %双线性插值法旋转图像45度,并剪切图像和原图像大小一致。
源程序:clc;clear;close;[I,map]=imread('E:\学习\图像处理与机器视觉\图像变换.bmp'); subplot(2,2,1),imshow(I),title('图像变换原图');J1=imrotate(I,45,'bilinear','crop'); %双线性插值法旋转图像60度,并剪切图像和原图像大小一致),(v u F ),(v u G ),(y x f Nux j N xNux j N xe u F Nx f u F F e x f u F x f F /211/21)(1)()]([)()()]([ππ∑∑-=---=====subplot(2,2,3),imshow(J1),title('旋转图像45度');J2=fft2(I); %fft2 函数用于数字图像的二维傅立叶变换K1=fftshift(abs(J2)); %频谱中心化RR1=real(K1); %取傅立叶变换的实部II1=imag(K1); %取傅立叶变换的虚部A1=sqrt(RR1.^2+II1.^2); %计算频谱幅值A1=(A1-min(min(A1)))/(max(max(A1))-min(min(A1)))*225; %归一化,max(a)求矩阵a 中列最大,max(max(a))表示求a中最大元素。