5. 图像增强技术
进行图像显示时,将图像的数据格式修改为uint8类型
1 %%--------灰度变换增强------- 2 3 %图像的灰度调整 4 J=imadjust(I,[low_in high_in],[low_out high_out]); 5 J=imadjust(I,[low_in high_in],[low_out high_out],gamma); %gamma等于1时为线性映射,否则为非线性映射;gamma<1:加强亮色值的输出;gamma>1:加强暗色值的输出 6 %对彩色图像增强,是对彩色图像的RGB值分别进行操作 7 J=imadjust(I,[0.2 0.3 0; 0.6 0.7 1],[]); 8 9 %计算灰度图像的最佳输入区间 10 M=stretchlim(I); %函数imadjust的第二个参数 11 J=imadjust(I,M,[]); 12 13 %改变灰度图像的亮度 14 imshow(I) 15 brighten(beta); %通常放在imshow()后面;beta大于0小于1时,图像变亮;小于0大于-1,图像变暗 16 17 %图像反转变换 18 J=imcomplement(I); %增强暗色背景下的白色或灰色细节 19 20 %%--------直方图增强-------- 21 22 %获取灰度图像的直方图 23 imhist(I); 24 imhist(I,n); %n:灰度级数目,默认值256 25 26 %RGB彩色图像的颜色直方图 27 I=imread('onion.png'); 28 imhist(I(:,:,1)); %R 29 imhist(I(:,:,2)); %G 30 imhist(I(:,:,3)); %B 31 32 %彩色图像的HSV分量直方图 33 I=imread('football.jpg'); 34 J=rgb2hsv(I); 35 imhist(J(:,:,1)); %H 36 imhist(J(:,:,2)); %S 37 imhist(J(:,:,3)); %V 38 39 %直方图均衡化 40 J=histeq(I,n); %n:灰度级数目,默认值64 41 42 %直方图规定化处理 43 hgram=oens(1,256); 44 J=histeq(I,hgram); %hgram:整数向量,表示用户希望的直方图形状
5.2 图像的统计特性
1 %图像均值 2 I=imread('onion.png'); 3 J=rgb2gray(I); 4 gray=mean2(J); %灰度图像的平均灰度值,计算二维矩阵的均值 5 rgb=mean2(I); %RGB图像所有颜色的平均值 6 r=mean2(I(:, :, 1)); %RGB彩色图像每种颜色的平均值 7 g=mean2(I(:, :, 2)); 8 b=mean2(I(:, :, 3)); 9 10 %图像的标准差 11 s=std2(I) 12 13 %图像的相关系数 14 r=corr2(A,B); %两个灰度图像的相关系数,A和B为大小相等的二维矩阵 15 16 %图像的等高线 17 imcontour(I); 18 imcontour(I,n); %n:等高线条数
5.3 空域滤波
1 %------线性空域滤波------- 2 3 %邻域相卷积 imfilter 4 I=imread('coins.png'); 5 J=imnoise(I, 'salt & pepper', 0.02); %添加噪声 6 h=ones(3,3)/5; %建立模板 7 h(1,1)=0; h(1,3)=0; 8 h(3,1)=0; h(1,3)=0; 9 K=imfilter(J, h); %图像滤波 10 11 %二维卷积 conv2 12 I=im2double(I); 13 J=imnoise(I, 'gaussian', 0, 0.01); 14 h=ones(3,3)/9; 15 K=conv2(J, h); 16 17 %二维线性数字滤波 filter2 18 I=imread('coins.png'); 19 I=im2double(I); 20 J=imnoise(I, 'salt & pepper', 0.02); 21 h=fspecial('average', 3); %产生滤波器模板 22 K=filter2(h, J); 23 imshow(K); 24 25 %------非线性空域滤波------- 26 27 %中值滤波 28 %保护边缘的非线性图像平滑方法;非常适合去除图像的椒盐噪声 29 K=medfilt2(J); 30 31 %排序滤波 32 I=imread('coins.png'); 33 I=im2double(I); 34 %最小值滤波 35 J1=ordfilt2(I, 1, true(5)); %模板大小5*5=25,取排序后的最小值 36 %最大值滤波 37 J2=ordfilt2(I, 25, true(5)); %取排序后的最大值 38 39 %自适应滤波 40 %根据图像的局部方差来调整滤波器的输出。局部方差大时,滤波器平滑效果较弱;局部方差小时,滤波器平滑效果较强 41 I=im2double(I); 42 J=imnoise(I, 'gaussian', 0, 0.01); 43 K=wiener2(J, [5 5]); 44 45 %锐化滤波器-拉普拉斯算子 46 %补偿模糊图像的轮廓,让图像变得清晰 47 %拉普拉斯算子比较适合用于改善因为光线的漫散射造成的图像模糊 48 I=imread('rice.png'); 49 I=im2double(I); 50 h=[0,1,0; 1, -4, 1; 0, 1, 0]; %拉普拉斯算子 51 J=conv2(I, h, 'same'); %通过卷积对图像进行锐化滤波 52 K=I-J; 53 imshow(K)
5.4 频域滤波
1 %---------低通滤波--------- 2 3 %效果是图像去噪声平滑增强,但同时也抑制了图像的边界,造成图像不同程度的模糊 4 5 % 1.理想低通滤波器 6 %有很严重的振铃现象 7 I=imread('coins.png'); 8 I=im2double(I); %原图像 9 M=2*size(I,1); %滤波器的行数 10 N=2*size(I,2); %滤波器的列数 11 u=-M/2:(M/2-1); 12 v=-N/2:(N/2-1); 13 [U,V]=meshgrid(u, v); 14 D=sqrt(U.^2+V.^2); 15 D0=80; %截至频率 16 H=double(D<=D0); %理想低通滤波器 17 J=fftshift(fft2(I, size(H, 1), size(H, 2))); %时域图像转换到频域;fftshift将零频点移到频谱的中间 18 K=J.*H; %滤波处理 19 L=ifft2(ifftshift(K)); %傅里叶反变换 20 L=L(1:size(I,1), 1:size(I, 2)); %滤波后图像 21 22 % 2.巴特沃斯低通滤波器 23 %n越大滤波器形状越陡峭 24 I=imread('liftingbody.png'); 25 I=im2double(I); 26 M=2*size(I,1); 27 N=2*size(I,2); 28 u=-M/2:(M/2-1); 29 v=-N/2:(N/2-1); 30 [U,V]=meshgrid(u, v); 31 D=sqrt(U.^2+V.^2); 32 D0=50; %截至频率 33 n=6; %滤波器的阶数 34 H=1./(1+(D./D0).^(2*n)); %设计巴特沃斯滤波器 35 J=fftshift(fft2(I, size(H, 1), size(H, 2))); %转换到频域 36 K=J.*H; %频域处理 37 L=ifft2(ifftshift(K)); %傅里叶反变换 38 L=L(1:size(I,1), 1:size(I, 2)); %改变图像大小 39 40 % 3.高斯低通滤波器 41 42 %---------高通滤波--------- 43 44 %使图像得到锐化处理,突出图像的边界;把信息丰富的低频去掉了,丢失了很多必要的信息;一般情况,高通滤波对噪声没有任何抑制作用 45 %为了既加强图像的细节又抑制噪声,可以采用高频加强滤波,实际上是由一个高通滤波器和一个全通滤波器构成的 46 47 % 1.理想高通滤波器 48 49 % 2.巴特沃斯高通滤波器 50 I=imread('rice.png'); 51 I=im2double(I); 52 M=2*size(I,1); 53 N=2*size(I,2); 54 u=-M/2:(M/2-1); 55 v=-N/2:(N/2-1); 56 [U,V]=meshgrid(u, v); 57 D=sqrt(U.^2+V.^2); 58 D0=30; 59 n=6; 60 H=1./(1+(D0./D).^(2*n)); 61 J=fftshift(fft2(I, size(H, 1), size(H, 2))); 62 K=J.*H; 63 L=ifft2(ifftshift(K)); 64 L=L(1:size(I,1), 1:size(I, 2)); 65 66 % 3.高斯高通滤波器 67 I=imread('coins.png'); 68 I=im2double(I); 69 M=2*size(I,1); 70 N=2*size(I,2); 71 u=-M/2:(M/2-1); 72 v=-N/2:(N/2-1); 73 [U,V]=meshgrid(u, v); 74 D=sqrt(U.^2+V.^2); 75 D0=20; 76 H=1-exp(-(D.^2)./(2*(D0^2))); 77 J=fftshift(fft2(I, size(H, 1), size(H, 2))); 78 K=J.*H; 79 L=ifft2(ifftshift(K)); 80 L=L(1:size(I,1), 1:size(I, 2)); 81 82 %---------带阻滤波器--------- 83 84 % 1.理想带阻滤波器 85 I=imread('coins.png'); 86 I=imnoise(I, 'gaussian', 0, 0.01); 87 I=im2double(I); 88 M=2*size(I,1); 89 N=2*size(I,2); 90 u=-M/2:(M/2-1); 91 v=-N/2:(N/2-1); 92 [U,V]=meshgrid(u, v); 93 D=sqrt(U.^2+V.^2); 94 D0=50; 95 W=30; %滤波器的带宽 96 H=double(or(D<(D0-W/2), D>D0+W/2)); 97 J=fftshift(fft2(I, size(H, 1), size(H, 2))); 98 K=J.*H; 99 L=ifft2(ifftshift(K)); 100 L=L(1:size(I,1), 1:size(I, 2)); 101 102 % 2.巴特沃斯带阻滤波器 103 104 % 3.高斯带阻滤波器 105 106 %---------同态滤波器--------- 107 108 %可用于压缩图像灰度的动态范围,且增强对比度 109 110 %图像由照射分量和反射分量相乘表示,照射分量和光源有关,通常用来表示慢的动态变化,决定一幅图像中像素能达到的动态范围;反射分量由物体本身特性决定,表示灰度的急剧变化部分;照射分量和傅里叶变换后的低频分量相关,反射分量和高频分量相关 111 %同态滤波就是选择合适的频域滤波器对图像的低频和高频分量分别进行不同的处理,成为同态滤波 112 I=imread('pout.tif'); 113 J=log(im2double(I)+1); %取对数 114 K=fft2(J); %傅里叶变换 115 n=5; %同态滤波参数 116 D0=0.1*pi; 117 rh=0.7; 118 rl=0.4; 119 [row, column]=size(J); 120 for i=1:row %设计滤波器矩阵 121 for j=1:column 122 D1(i,j)=sqrt(i^2+j^2); 123 H(i,j)=rl+(rh/(1+(D0/D1(i,j))^(2*n))); 124 end 125 end 126 L=K.*H; %滤波 127 M=ifft2(L); %傅里叶反变换 128 N=exp(M)-1; %取指数