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