matlab數(shù)字圖像處理之圖像增強(qiáng)
圖像處理
基本目的之一是改善圖像質(zhì)量,而改善圖像最常用的技術(shù)是圖像增強(qiáng)的目的是為了改善圖像的視覺效果,使圖像更加清晰,便于人和計(jì)算機(jī)對(duì)圖像進(jìn)一步的分析和處理
圖像質(zhì)量
的基本含義是指人們對(duì)一幅圖像視覺感受的評(píng)價(jià)。圖像增強(qiáng)的目的就是為了改善圖像顯示的主觀視覺質(zhì)量。圖像質(zhì)量包含兩方面的內(nèi)容,一是圖像的逼真度,即被評(píng)價(jià)圖像與原標(biāo)準(zhǔn)圖像的偏離程度;二是圖像的可懂度,指圖像能向人或機(jī)器提供信息的能力。目前為止,還沒有找到一種和人的主觀感受一致的客觀、定量的圖像質(zhì)量評(píng)價(jià)方法。
圖像增強(qiáng)按作用域可分為
- 空域內(nèi)處理
- 頻域內(nèi)處理
空域內(nèi)處理是直接對(duì)圖像進(jìn)行處理,頻域內(nèi)處理是在圖像的某個(gè)變換域內(nèi),對(duì)圖像的變換系數(shù)進(jìn)行運(yùn)算,然后通過逆變換獲得圖像增強(qiáng)效果。
1.空域增強(qiáng)
空域內(nèi)的圖像增強(qiáng)就是調(diào)整灰度圖像的明暗對(duì)比度,是對(duì)圖像中各個(gè)像素的灰度值直接進(jìn)行處理。
常用的方法包括
- 灰度變換增強(qiáng)
- 直方圖增強(qiáng)
- 平滑
- 銳化
1.1 灰度變換增強(qiáng)
灰度變換增強(qiáng)是在空間域內(nèi)對(duì)圖像進(jìn)行增強(qiáng)的一種簡(jiǎn)單而有效的方法。灰度變換增強(qiáng)不改變?cè)瓐D像中像素的位置,只改變像素點(diǎn)的灰度值,并逐點(diǎn)進(jìn)行,和周圍的其他像素點(diǎn)無關(guān)。為了進(jìn)行灰度變換,首先需要獲取圖像的直方圖。在MATLAB中,可以通過編寫程序獲取灰度圖像的直方圖,也可以通過函數(shù)imhist( )獲取灰度圖像的直方圖。
I = imread('lena_color_512.tif');
I_G = rgb2gray(I);
row = size(I_G, 1);
column = size(I_G, 2);
N = zeros(1,256);
for i = 1: row
for j = 1: column
k = I_G(i, j);
N(k+1) = N(k+1) + 1;
end
end
figure
subplot(121), imshow(I_G);
subplot(122), bar(N);
axis tight;
下圖為灰度圖以及進(jìn)行了每個(gè)像素點(diǎn)增強(qiáng)1的灰度直方圖
圖一如下:
當(dāng)然也可以直接對(duì)灰度圖使用imhist函數(shù)不進(jìn)行別的操作,只繪制直方圖
I = imread('lena_color_512.tif');
I_G = rgb2gray(I);
imhist(I_G);
如下圖2:(與圖一相比肉眼看不出差距,因?yàn)槊總€(gè)像素點(diǎn)只增加了1個(gè)灰度級(jí))
1.2 直方圖增強(qiáng)
圖像的灰度直方圖表示灰度圖像中具有每種灰度的像素的個(gè)數(shù),反映了圖像中每種灰度級(jí)出現(xiàn)的頻率,是圖像的基本統(tǒng)計(jì)特征之一。直方圖均衡方法因?yàn)槠溆行院秃?jiǎn)單性已成為圖像對(duì)比度增強(qiáng)的最常用方法。其基本思想是根據(jù)輸入圖像的灰度概率分布來確定其對(duì)應(yīng)的輸出灰度值,通過擴(kuò)展圖像的動(dòng)態(tài)范圍達(dá)到提升圖像對(duì)比度的目的。
直方圖增強(qiáng)是以概率論為基礎(chǔ),常用的直方圖調(diào)整方法包括直方圖均衡化和直方圖規(guī)定化兩方面。
- 直方圖均衡化
由上面的灰度圖的直方圖指導(dǎo)它并不均勻,主要集中在中間,故我們來考慮均衡化,直接調(diào)用函數(shù)histeq()即可
I = imread('lena_color_512.tif');
J = rgb2gray(I);
H = histeq(J);
figure(1)
subplot(121), imshow(J);
subplot(122), imshow(H);
figure(2)
subplot(121), imhist(J);
subplot(122), imhist(H)
下圖中右邊均為均衡化的結(jié)果
- 直方圖規(guī)定化
I = imread('lena_color_512.tif');
J = rgb2gray(I);
hgram = ones(1, 256);
H = histeq(J);
B = histeq(J, hgram);
figure(1)
subplot(121), imshow(H);
subplot(122), imshow(B);
figure(2)
subplot(121), imhist(H);
subplot(122), imhist(B);
這里的hgram為自己設(shè)定的規(guī)定化函數(shù),這里設(shè)定了一個(gè)全是1的矩陣,用它來規(guī)定原圖,規(guī)定化是一個(gè)擬合過程,變換后的直方圖不會(huì)與目標(biāo)圖像的直方圖完全一致.
右圖為采用規(guī)定化的結(jié)果,即擬合的結(jié)果
1.3 平滑
平滑就是去除一些離散的噪聲以及將目標(biāo)里的間斷點(diǎn)串聯(lián)起來以得到一個(gè)清晰的畫面,平滑一般是用濾波來實(shí)現(xiàn),因?yàn)槲乙彩莿倢W(xué)所以是用的現(xiàn)成的函數(shù),舉例(均值濾波)還有很多其他的平滑濾波如鄰域平均濾波,加權(quán)平均濾波:
clc
clear all
picture=rgb2gray(imread("dream.jpg"));
way1=fspecial('average',3);
picture1=filter2(way1,picture)/255;%一定要除以255,否則是白圖
figure;
subplot(121);
imshow(picture);
subplot(122);
imshow(picture1);
?
左圖是原圖,右圖是均值濾波(處理高斯噪聲好)產(chǎn)生的圖片,還有線性濾波,中值濾波,自適應(yīng)濾波;
1.4 銳化
? ? 銳化是提取邊緣的一個(gè)功能,可以將提取到的邊緣圖片與原圖片進(jìn)行疊加,可以實(shí)現(xiàn)圖片的清晰度增加,舉例:
clc
clear all
picture=rgb2gray(imread("dream.jpg"));
way2=fspecial('sobel');
picture1=filter2(way2,picture);
picture2=uint8(picture1)+picture;
figure;
subplot(131);
imshow(picture);
subplot(132);
imshow(picture1);
subplot(133);
imshow(picture2);
?左圖是原圖,中間是sobel算子銳化得到的圖片,右圖是將原圖與銳化的得到的圖片進(jìn)行疊加,可以看出右圖增加了視覺效果,除此之外還有其他多種算子;
2.圖像屬性
2.1 圖像的標(biāo)準(zhǔn)差
直接利用std()來計(jì)算向量的標(biāo)準(zhǔn)差,通過std2()來計(jì)算矩陣的標(biāo)準(zhǔn)差,灰度圖像的像素為二維矩陣A,則該圖像的標(biāo)準(zhǔn)差為std2(A),用mean2()來獲取圖像的均值,同樣對(duì)于兩個(gè)大小相等的二維矩陣,可以計(jì)算起相關(guān)系數(shù),利用corr2來實(shí)現(xiàn),這里用代碼和結(jié)果來展示:
I = imread('lena_color_512.tif');
J = rgb2gray(I);
gray = mean2(J); %灰度圖的均值
grb = mean2(I); %彩色圖的均值
r = mean2(I(:, :, 1)) %紅色均值
g = mean2(I(:, :, 2)) %綠色均值
b = mean2(I(:, :, 3)) %藍(lán)色均值
s1 = std2(J) %灰度圖方差
J2 = histeq(J);
s2 = std2(J2) %均衡化后方差
F = medfilt2(J);
r = corr2(J, F) %原圖與濾波后圖形的相關(guān)系數(shù)
結(jié)果如下
r =
180.2237
g =
99.0512
b =
105.4103
s1 =
47.8557
s2 =
74.7229
r =
0.9959
2.2 圖像的等高線
在MATLAB軟件中,通過函數(shù)imconlour( )可以繪制灰度圖像的等高線。
該函數(shù)的簡(jiǎn)單調(diào)用格式為:
- imcontour(I): 該函數(shù)中I為灰度圖像的二維數(shù)據(jù)矩陣,繪制灰度圖像的等高線。
- imcontour(I, n): 該函數(shù)設(shè)置等高線的條數(shù)為n,如果不指定n,該函數(shù)會(huì)自動(dòng)選取n。
I = imread('lena_color_512.tif');
J = rgb2gray(I);
figure(1)
subplot(121), imshow(J);
subplot(122), imcontour(J, 3);
右圖為設(shè)定三條等高線的結(jié)果,圖形比較的不美觀,因?yàn)榛叶戎祫澐挚缍忍?br>
subplot(121), imshow(J);
subplot(122), imcontour(J);
不設(shè)定n的取值之后,其灰度劃分比較接近原圖
3.圖像濾波
3.1 空域?yàn)V波
空域?yàn)V波是空域圖像增強(qiáng)的常用方法??沼?yàn)V波是對(duì)圖像中每個(gè)像素為中心的鄰域進(jìn)行一系列的運(yùn)算,然后將得到的結(jié)果代替原來的像素值??沼?yàn)V波分為
- 線性空域?yàn)V波
- 非線性空域?yàn)V波
線性空域?yàn)V波
線性平均濾波是一種最常用的線性空域?yàn)V波。線性平均濾波實(shí)際是一種低通濾波,信號(hào)的低頻部分通過,阻止高頻部分通過。由于圖像的邊緣處于高頻部分,因此線性平均濾波后,會(huì)造成圖像邊緣的模糊。在進(jìn)行線性平均濾波時(shí),常用的模板大小為3X3,如下所示:
T = 1/5 [ 0 1 0 ; 1 1 1; 0 1 1]
對(duì)應(yīng)的函教表達(dá)式為:
f(x) = 1/5 [f(x, y-1) + f(x-1, y) + f(x,y) + f(x+1, y) + f(x, y+1)]
舉個(gè)例子
I = imread('lena_color_512.tif');
J = imnoise(I, 'salt & pepper', 0.02); %添加椒鹽噪聲
h = ones(3,3)/5;
h(1,1) = 0; h(1,3) = 0;
h(3,1) = 0; h(3,3) = 0; %構(gòu)建線性濾波矩陣
K = imfilter(J, h); %濾波
figure(1)
subplot(131), imshow(I);
subplot(132), imshow(J);
subplot(133), imshow(K);
% figure(2)
% subplot(121), imhist(J);
% subplot(122), imhist(B);
當(dāng)然也可以添加高斯噪聲,其濾波的模板是不同的
下面是對(duì)灰度圖像加高斯噪聲再進(jìn)行濾波的處理
I = imread('lena_color_512.tif');
I = rgb2gray(I);
I = im2double(I);
J = imnoise(I, 'gaussian', 0, 0.01); %添加高斯噪聲
h = ones(3,3)/9;
K = conv2(J, h); %濾波
subplot(131), imshow(I);
subplot(132), imshow(J);
subplot(133), imshow(K);
當(dāng)然也可以直接對(duì)彩色圖像進(jìn)行處理,代碼復(fù)雜一些,因?yàn)檫@里的卷積函數(shù)是對(duì)二維來操作的,故
I = imread('lena_color_512.tif');
I = im2double(I);
[h, w, c] = size(I);
J = zeros(h, w, c, 'double');
J(:, :, 1) = imnoise(I(:, :, 1), 'gaussian', 0, 0.1); %添加高斯噪聲
J(:, :, 2) = imnoise(I(:, :, 2), 'gaussian', 0, 0.1); %添加高斯噪聲
J(:, :, 3) = imnoise(I(:, :, 3), 'gaussian', 0, 0.1); %添加高斯噪聲
P = ones(6, 6)/36;
img = zeros(h, w, c, 'double');
img(:, :, 1) = conv2(J(:, :, 1), P, 'same');
img(:, :, 2) = conv2(J(:, :, 2), P, 'same');
img(:, :, 3) = conv2(J(:, :, 3), P, 'same');
figure(1)
subplot(131), imshow(I);
subplot(132), imshow(J);
subplot(133), imshow(img);
這里每個(gè)圖層都增加了0.1倍的高斯噪聲
非線性空域?yàn)V波
非線性空域?yàn)V波主要包括中值濾波,順序統(tǒng)計(jì)濾波和自適應(yīng)濾波等。
- 中值濾波
一種保護(hù)邊緣的非線性平滑方法,在圖像增強(qiáng)中應(yīng)用非常廣泛
- 一維中值濾波:對(duì)于一維數(shù)據(jù),按照從大到小的順序排列
- 二維中值濾波:用于圖像增強(qiáng),可以去除圖像中的椒鹽噪聲,平滑效果優(yōu)于均值濾波,在抑制噪聲的同時(shí)還能保持圖像的邊緣清晰,常用medfilt2()進(jìn)行圖像的二維中值濾波
順序統(tǒng)計(jì)濾波例子:
I = imread('lena_color_512.tif');
I = rgb2gray(I);
I = im2double(I);
J1 = ordfilt2(I, 1, true(5)); %構(gòu)造一個(gè)5*5的模板,取最小值1作為輸出
J2 = ordfilt2(I, 25, true(5)); %構(gòu)造一個(gè)5*5的模板,取最大值25作為輸出
figure(1)
subplot(131), imshow(I);
subplot(132), imshow(J1);
subplot(133), imshow(J2);
可以看到取最小值圖像暗一些,而最大值圖像顯得白一些
二維中值濾波例子:
I = imread('lena_color_512.tif');
I = rgb2gray(I);
I = im2double(I);
J = imnoise(I, 'salt & pepper', 0.03); %添加椒鹽噪聲
K = medfilt2(J);
figure(1)
subplot(131), imshow(I);
subplot(132), imshow(J);
subplot(133), imshow(K);
- 自適應(yīng)濾波
可通過調(diào)整圖像局部的方差來調(diào)整濾波器的輸出
I = imread('lena_color_512.tif');
I = rgb2gray(I);
I = im2double(I);
J = imnoise(I, 'gaussian', 0, 0.01); %添加椒鹽噪聲
K = wiener2(J, [5 5]);
figure(1)
subplot(131), imshow(I);
subplot(132), imshow(J);
subplot(133), imshow(K);
3.2 頻域?yàn)V波
頻率域圖像增強(qiáng)首先通過傅立葉變換將圖像從空間域轉(zhuǎn)換為頻率域,然后在頻率域內(nèi)對(duì)圖像進(jìn)行處理,最后通過傅立葉反變換轉(zhuǎn)換到空間域。頻率域內(nèi)的圖像增強(qiáng)通常包括低通濾波、高通濾波和同態(tài)濾波等。
設(shè)為原始圖像函數(shù),為濾波器脈沖響應(yīng)函數(shù),則空域內(nèi)的濾波是基于卷積運(yùn)算的,如下所示:
g(x,y)= f(x, y)*h(x, y)
其中可以是低通或高通濾波,為空域?yàn)V波的輸出圖像函數(shù)。根據(jù)卷積定理,上式的傅立葉變換如下:
G(u,v)= F(u, v)H(u, v)
低通濾波器
- 低通濾波器
低通濾波器的功能是讓低頻率通過而濾掉或衰減高頻,其作用是過濾掉包含在高頻中的噪聲。所以低通濾波的效果是圖像的去噪聲平滑增強(qiáng),但同時(shí)也抑制了圖像的邊界,造成圖像不同程度上的模糊。對(duì)于大小為M*N的圖像,頻率點(diǎn)與頻域中心的距離為D,其表達(dá)式為:
D(u,v)=[(u - M/2)^2 + (v - N/2)^2 ]^(1/2)
代碼如下:
I = imread('lena_color_512.tif');
I = rgb2gray(I);
I = im2double(I);
M = 2*size(I, 1);
N = 2*size(I, 2);
u = -M/2 : (M/2-1);
v = -N/2 : (N/2-1);
[U, V] = meshgrid(u, v);
D = sqrt(U.^2 + V.^2); %構(gòu)造D
D0 = 80; %D0為截止頻率
H = double(D <= D0);
J = fftshift(fft2(I, size(H, 1), size(H, 2))); %轉(zhuǎn)換為頻域再用fftshift進(jìn)行平移
K = J.*H; %頻域內(nèi)濾波
L = ifft2(ifftshift(K)); %逆變換回到空域
L = L(1: size(I, 1), 1: size(I, 2));
figure
subplot(121), imshow(I);
subplot(122), imshow(L);
可看到高頻部分被截止,圖像邊緣變得模糊
巴特沃斯濾波器
I = imread('lena_color_512.tif');
I = rgb2gray(I);
I = im2double(I);
M = 2*size(I, 1);
N = 2*size(I, 2);
u = -M/2 : (M/2-1);
v = -N/2 : (N/2-1);
[U, V] = meshgrid(u, v);
D = sqrt(U.^2 + V.^2);
D0 = 50; %D0為截止頻率
n = 6; %階數(shù)為6
H = 1./(1+(D./D0).^(2*n));
J = fftshift(fft2(I, size(H, 1), size(H, 2))); %轉(zhuǎn)換為頻域再用fftshift進(jìn)行平移
K = J.*H; %頻域內(nèi)濾波
L = ifft2(ifftshift(K)); %逆變換回到空域
L = L(1: size(I, 1), 1: size(I, 2));
figure
subplot(121), imshow(I);
subplot(122), imshow(L);
同樣去除了邊緣部分,圖像變得模糊
巴特沃斯高通濾波器
代碼與前面巴特沃斯的相同,只是改變了截止頻率,下圖為D0=30的結(jié)果
高斯高通濾波器
I = imread('lena_color_512.tif');
I = rgb2gray(I);
I = im2double(I);
M = 2*size(I, 1);
N = 2*size(I, 2);
u = -M/2 : (M/2-1);
v = -N/2 : (N/2-1);
[U, V] = meshgrid(u, v);
D = sqrt(U.^2 + V.^2);
D0 = 20; %D0為截止頻率
H = 1-exp(-(D.^2)./(2*(D0^2)));
J = fftshift(fft2(I, size(H, 1), size(H, 2))); %轉(zhuǎn)換為頻域再用fftshift進(jìn)行平移
K = J.*H; %頻域內(nèi)濾波
L = ifft2(ifftshift(K)); %逆變換回到空域
L = L(1: size(I, 1), 1: size(I, 2));
figure
subplot(121), imshow(I);
subplot(122), imshow(L);
可觀察到圖像的邊緣得到了增強(qiáng),即低頻部分被濾去
帶阻濾波器
I = imread('lena_color_512.tif');
I = rgb2gray(I);
I = imnoise(I, 'gaussian', 0, 0.01);
I = im2double(I);
M = 2*size(I, 1);
N = 2*size(I, 2);
u = -M/2 : (M/2-1);
v = -N/2 : (N/2-1);
[U, V] = meshgrid(u, v);
D = sqrt(U.^2 + V.^2);
D0 = 50; %D0為中心頻率
W = 30; %帶寬
H = double(or(D<(D0-W/2), D>(D0+W/2))); %阻帶為50-30/2到50+30/2;
J = fftshift(fft2(I, size(H, 1), size(H, 2))); %轉(zhuǎn)換為頻域再用fftshift進(jìn)行平移
K = J.*H; %頻域內(nèi)濾波
L = ifft2(ifftshift(K)); %逆變換回到空域
L = L(1: size(I, 1), 1: size(I, 2));
figure
subplot(121), imshow(I);
subplot(122), imshow(L);
左圖加了高斯噪聲,右圖為阻隔了一定頻率的濾波圖形
同態(tài)濾波
同態(tài)濾波是一種特殊的濾波技術(shù),可用于壓縮圖像灰度的動(dòng)態(tài)范圍,且增強(qiáng)對(duì)比度。這種處理方法與其說是一種數(shù)學(xué)技巧,倒不如說因?yàn)槿搜垡曈X系統(tǒng)對(duì)圖像亮度具有類似于對(duì)數(shù)運(yùn)算的非線性特性。
I = imread('lena_color_512.tif');
I = rgb2gray(I);
J = log(im2double(I)+1);
K = fft2(J);
n = 5;
D0 = 0.1*pi;
rh = 0.7;
rl = 0.4;
[row, column] = size(J);
for i = 1: row
for j = 1: column
D1(i, j) = sqrt(i^2+j^2);
H(i, j) = rl + (rh/(1+(D0/D1(i, j))^(2*n)));
end
end
L = K.*H;
M = ifft2(L);
N = exp(M)-1;
figure
subplot(121), imshow(I);
subplot(122), imshow(N);
注意如果運(yùn)行代碼的時(shí)候沒有別的問題,卻有些矩陣維度不一樣啥的,或者別的變量問題,j極大可能是沒有清空變量和工作區(qū),加入這些代碼
clear all
close all
圖像增強(qiáng)部分內(nèi)容比較多,一定要好好掌握哇~文章來源:http://www.zghlxwxcb.cn/news/detail-444796.html
重點(diǎn)參考
1. Matlab之圖像增強(qiáng)技術(shù)
2. 數(shù)字圖像處理——頻域?yàn)V波基礎(chǔ)文章來源地址http://www.zghlxwxcb.cn/news/detail-444796.html
到了這里,關(guān)于matlab數(shù)字圖像處理之圖像增強(qiáng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!