0
点赞
收藏
分享

微信扫一扫

图像增强

前言:图像增强的方法有很多,本篇博客只简单介绍个别图像增强的方法即相应的代码实现,更多的方法请查阅其他的博客或资料。

图像增强的目的:改善图像的视觉效果,或将图像转换成更适合于人眼观察和机器分析识别的形式,以便从图像中获取更有用的信息。

1 反转变换

图像增强_图像增强

下图(a)是一幅X射线照片,其中显示一小块病变。尽管事实上两幅图像在视觉内容上都一样,

但应注意,在这种情况下,分析乳房组织时使用反转图像会容易得多

图像增强_直方图_02

1 image1=imread('D:/picture/ZiXia.jpg');
2 subplot(121);
3 imshow(image1);
4 image2=imcomplement(image1);%imcomplement为一个函数的名称,其可以对图像数据进行取反运算(实现底片效果)。
5 subplot(122);
6 imshow(image2);

图像增强_直方图均衡化_03

紫霞仙子白白的脸因为颜色反转变成偏黑色,黑色的秀发变成了白发,衣服的反转更明显,变过后的样子有点小恐怖呐

2基于直方图的图像增强

图像增强_直方图_04

上面的一道题大致就说明了直方图增强的原理,从该例可知,直方图均衡化的实质是减少图像的灰度级以换取对比度的加大。
在均衡过程中,原来的直方图上频数较小的灰度级被归入很少几个或一个灰度级内。
若这些灰度级所构成的图像细节比较重要,则需采用局部区域直方图均衡。

 

下面的函数是求图像的直方图的方法

1 I=imread('C:/lenagray.jpg');
2 %I=double(I);
3 for i=1:256
4 h(i)=sum(sum(I==i-1)); end%
5 subplot(121);
6 imshow(I);
7 title('原始图像');
8 subplot(122)
9 plot(h);
10 title('图像的直方图');

图像增强_图像增强_05

可能大家对于h(i)=sum(sum(I==i-1)); end%这句代码有点不理解,其实就是计算I中i的个数

那为啥是两个sum呢,看一下下面的例子就应该明白了

图像增强_图像增强_06

 

直方图均衡化

1 I=imread('D:/picture/lenagray.jpg');
2 K=16;
3 H=histeq(I,K);%均衡化后的直方图只有16个灰度级;
4 figure,subplot(2,2,1);
5 imshow(I,[]);
6 subplot(2,2,2);
7 imshow(H,[]),hold on%注释一
8 subplot(223);
9 hist(double(I),16),
10 subplot(224)
11 hist(double(H),16)

 

图像增强_图像增强_07

 

 3Butterworth低通滤波器(频率域图像增强)

 

1 image1=imread('D:/picture/boy.jpg');
2 %image1=rgb2gray(image1);
3 figure
4 imshow(image1)
5 I1=fftshift(fft2(image1));
6 [M,N]=size(I1);
7 n=2;
8 d0=30;
9 n1=floor(M/2);
10 n2=floor(N/2);
11 for i=1:M;
12 for j=1:N
13 d=sqrt((i-n1)^2+(j-n2)^2);
14 H=1/(1+(d/d0)^(2*n));%对应的公式
15 I2(i,j)=H*I1(i,j);
16 end
17 end
18 I2=ifftshift(I2);
19 I3=real(ifft2(I2));
20 figure;
21 imshow(I3,[]);
22
23

 4同态滤波

1 [image_0,map]=imread('D:/picture/lenagray.jpg');
2 image_1=log(double(image_0)+1);
3 image_2=fft2(image_1);
4 n=3; D0=0.05*pi; rh=0.8; rl=0.5;
5 [row,col]=size(image_2);
6 for k=1:1:row
7 for l=1:1:col
8 D1(k,l)=sqrt((k^2+l^2));
9 H(k,l)=rl+(rh/(1+(D0/D1(k,l))^(2*n)));
10 image_2(k,l)=image_2(k,l)*H(k,l);
11 end
12 end
13 image_4=ifft2(image_2);
14 image_5=(exp(image_4)-1);
15 subplot(121),imshow(image_0,map);title('原图')
16 subplot(122),imshow(real(image_5),map);title('同态滤波后的图')

图像增强_直方图_08

 

 

注释一

 

hold on 和hold off(默认),是相对使用的
前者的意思是,你在当前图的轴(坐标系)中画了一幅图,再画另一幅图时,原来的图还在,与新图共存,都看得到
后者表达的是,你在当前图的轴(坐标系)中画了一幅图,此时,状态是hold off,则再画另一幅图时,原来的图就看不到了,在轴上绘制的是新图,原图被替换了

看下面三个例子

p1

 

1 t=(0:pi/100:pi)';       
2 y1=sin(t)*[1,-1];
3 y2=sin(t).*sin(9*t);
4 t3=pi*(0:9)/9;
5 y3=sin(t3).*sin(9*t3);
6 plot(t,y1,'r:',t,y2,'-bo')
7 hold on
8 plot(t3,y3,'s','MarkerSize',10,'MarkerEdgeColor',[0,1,0],'MarkerFaceColor',[1,0.8,0])
9 axis([0,pi,-1,1])
10 hold off

 

图像增强_直方图_09

 

p2

1 t=(0:pi/100:pi)';       
2 y1=sin(t)*[1,-1];
3 y2=sin(t).*sin(9*t);
4 t3=pi*(0:9)/9;
5 y3=sin(t3).*sin(9*t3);
6 plot(t,y1,'r:',t,y2,'-bo')
7 %hold off
8 plot(t3,y3,'s','MarkerSize',10,'MarkerEdgeColor',[0,1,0],'MarkerFaceColor',[1,0.8,0])
9 axis([0,pi,-1,1])

图像增强_直方图_10

hold on 会使接下来画的图累加在原来的图上,hold off 会使原来的图被新的内容覆盖

图像增强_图像增强_11

 

作者:你的雷哥

本文版权归作者所有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。

举报

相关推荐

0 条评论