Matlab编程实现图像增强与去噪

企鹅博客
企鹅博客
企鹅博客
29281
文章
0
评论
2020年9月13日14:31:17 评论 12 views 1602字阅读5分20秒

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

Matlab编程实现图像增强与去噪

图1 lena原图像

使用如上程序对上图lena图像进行处理,分别得到下图所示的结果:

Matlab编程实现图像增强与去噪

图2 图像增强——直方图均衡化

Matlab编程实现图像增强与去噪

图3 图像去噪效果对比图

 

Matlab与C/C++联合编程之从Matlab调用C/C++代码 http://www.linuxidc.com/Linux/2012-08/68148.htm

二分类SVM方法Matlab实现 http://www.linuxidc.com/Linux/2013-05/84050.htm

Matlab中的取整函数fix, floor, ceil与round http://www.linuxidc.com/Linux/2013-10/91161.htm

继续阅读
weinxin
欢迎加入中国站长博客之家
本站的所有资源都会上传分享到博客之家,希望大家互相学习交流进步。
那些C语言缺失的,我在Rust里找到了 Linux编程

那些C语言缺失的,我在Rust里找到了

Librsvg似乎已经到了这样的一个地步:直接将C语言开发的部分改用Rust要比继续使用C语言来得更加容易。更何况,它越来越多的代码已经使用了Rust。 近来,我在C语言和Rust之间来回切换。在我看...
Struts2性能调优拦截器 Linux编程

Struts2性能调优拦截器

当我们在工作中需要实现某些小需求时,不妨先进行下简单的调研,看看正在使用的开源框架是否已经具备了我们需要的功能,这样就不用重复发明轮子了。 下面以性能测试为例,看看如何调查Struts2框架是否具备这...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: