歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

圖1 lena原圖像

使用如上程序對上圖lena圖像進行處理,分別得到下圖所示的結果:


圖2 圖像增強——直方圖均衡化


圖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

Matlab編譯cuda的.cu文件 http://www.linuxidc.com/Linux/2014-04/100675.htm

Copyright © Linux教程網 All Rights Reserved