Matlab编程实现图像增强与去噪
2013-09-14 23:42
288 查看
Matlab编程实现图像增强与去噪
Matlab中为我们提供了大量的函数,以方便我们对设计的算法进行验证,方便我们进行科学研究等等。使用Matlab处理数字图像也是相当方便的,它给我们提供了很多函数,如读取(imread)、显示(imshow)、存储(imwrite)、直方图均衡化(histeq)......,相当丰富的函数。
图像增强使用直方图均衡化方法,利用Matlab的histeq函数实现。使用Matlab自带函数加入椒盐噪声,分别使用低通滤波、中值滤波、同态滤波进行去噪。下面给出Matlab代码,涉及到的函数如有不清楚的,可以在Matlab命令窗口输入help
函数名,或者doc 函数名,查看帮助。
使用本程序,请新建一个.m文件,并命名为:imenhden.m,保存,将原始的图片与此m文件都放在Matlab当前工作目录下,然后在命令窗口输入:imenhden( 'lena.png');回车即可,其中lena.png为原始图片名。
function [ ] = imenhden( fineName )
%% 读入图像
I = imread(fineName);
figure(1);
subplot(2,2,1);
imshow(I);
title('原图像');
%% 直方图均衡化
m = 16;
H = histeq(I,m);
subplot(222);
imshow(H,[]);
title('均衡后的图像');
subplot(223);
hist(double(I),m);
title('直方图');
subplot(224);
hist(double(H),m)
title('均衡后的直方图');
%% 噪声与滤波
figure(2)
subplot(3,2,1);
imshow(I);
title('原图像');
% 加入椒盐噪声并显示
II = imnoise(I,'salt & pepper');
subplot(3,2,2);
imshow(II);
title('加入椒盐噪声后的图像');
% 低通滤波平滑
[B,A] = butter(6,0.2,'low');
J = filter(B,A,double(II));
subplot(3,2,3);
imshow(J,[]);
title('低通滤波平滑');
% 中值滤波平滑
J = medfilt2(II);
subplot(3,2,4);
imshow(J,[]);
title('中值滤波平滑');
% 同态滤波
[I0,M] = imread(fineName);
%I0 = II;M=[];
I1 = log(double(I0)+1);
I2 = fft2(I1);
N=2;D0=0.05*pi;rh=0.8;r=0.5;
[row,col]=size(I2);
for m=1:row
for n=1:col
D1(m,n)=sqrt(m^2+n^2);
H(m,n)=r+(rh/(1+(D0/D1(m,n))^(2*N)));
end
end
I3=I2.*single(H);
I4=ifft2(I3);
I5=exp(I4)-1;
subplot(3,2,5);
imshow(I0,M);
title('原图像');
subplot(3,2,6);
imshow(I5,M);
title('同态滤波后的图像');
end
![](https://img-blog.csdn.net/20130914233445218)
图1 lena原图像
使用如上程序对上图lena图像进行处理,分别得到下图所示的结果:
![](https://img-blog.csdn.net/20130914233754015)
图2 图像增强——直方图均衡化
![](https://img-blog.csdn.net/20130914233903140)
图3 图像去噪效果对比图
Matlab中为我们提供了大量的函数,以方便我们对设计的算法进行验证,方便我们进行科学研究等等。使用Matlab处理数字图像也是相当方便的,它给我们提供了很多函数,如读取(imread)、显示(imshow)、存储(imwrite)、直方图均衡化(histeq)......,相当丰富的函数。
图像增强使用直方图均衡化方法,利用Matlab的histeq函数实现。使用Matlab自带函数加入椒盐噪声,分别使用低通滤波、中值滤波、同态滤波进行去噪。下面给出Matlab代码,涉及到的函数如有不清楚的,可以在Matlab命令窗口输入help
函数名,或者doc 函数名,查看帮助。
使用本程序,请新建一个.m文件,并命名为:imenhden.m,保存,将原始的图片与此m文件都放在Matlab当前工作目录下,然后在命令窗口输入:imenhden( 'lena.png');回车即可,其中lena.png为原始图片名。
function [ ] = imenhden( fineName )
%% 读入图像
I = imread(fineName);
figure(1);
subplot(2,2,1);
imshow(I);
title('原图像');
%% 直方图均衡化
m = 16;
H = histeq(I,m);
subplot(222);
imshow(H,[]);
title('均衡后的图像');
subplot(223);
hist(double(I),m);
title('直方图');
subplot(224);
hist(double(H),m)
title('均衡后的直方图');
%% 噪声与滤波
figure(2)
subplot(3,2,1);
imshow(I);
title('原图像');
% 加入椒盐噪声并显示
II = imnoise(I,'salt & pepper');
subplot(3,2,2);
imshow(II);
title('加入椒盐噪声后的图像');
% 低通滤波平滑
[B,A] = butter(6,0.2,'low');
J = filter(B,A,double(II));
subplot(3,2,3);
imshow(J,[]);
title('低通滤波平滑');
% 中值滤波平滑
J = medfilt2(II);
subplot(3,2,4);
imshow(J,[]);
title('中值滤波平滑');
% 同态滤波
[I0,M] = imread(fineName);
%I0 = II;M=[];
I1 = log(double(I0)+1);
I2 = fft2(I1);
N=2;D0=0.05*pi;rh=0.8;r=0.5;
[row,col]=size(I2);
for m=1:row
for n=1:col
D1(m,n)=sqrt(m^2+n^2);
H(m,n)=r+(rh/(1+(D0/D1(m,n))^(2*N)));
end
end
I3=I2.*single(H);
I4=ifft2(I3);
I5=exp(I4)-1;
subplot(3,2,5);
imshow(I0,M);
title('原图像');
subplot(3,2,6);
imshow(I5,M);
title('同态滤波后的图像');
end
图1 lena原图像
使用如上程序对上图lena图像进行处理,分别得到下图所示的结果:
图2 图像增强——直方图均衡化
图3 图像去噪效果对比图
相关文章推荐
- OPENCV下针对IplImage实现图像增强处理
- 骨骼图像增强实验matlab实现
- 一种图像的曝光增强算法 MATLAB 实现
- 图像增强算法效果评价指标及实现
- 图像增强算法实现--直方图的均衡化
- 图像处理常用算法GPU实现五:图像对比度增强
- 眼底图像血管增强与分割--(2)Gabor滤波算法原理及实现
- 模糊集图像增强实现
- 哈工大深研院数字图像处理第一次大作业:不调用Matlab现有库函数实现图像增强
- 空间域图像增强及MATLAB实现
- OPENCV下针对IplImage实现图像增强处理
- OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
- 频率域图像增强MATLAB实现
- 空间域和频域结合的图像增强技术及实现
- Visual C++实现数字图像增强处理、平滑、锐化
- OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
- 拉普拉斯滤波实现图像增强
- 使用pillow实现tensorflow中的一些图像增强函数(crop,contrast,flip,per_image_standardization)
- MUSICA(多尺度图像对比度增强)算法的简要原理及VC实现
- 眼底图像血管增强与分割--(4)基于自适应对比度增强算法实现