11种图像清晰度评价函数
典型無(wú)參考圖像清晰度評(píng)價(jià)(可用作對(duì)焦評(píng)價(jià)函數(shù))
Tenengrad評(píng)價(jià)函數(shù)
Tenengrad函數(shù)是一種由Tenenbaum提出的,基于梯度的常用圖像清晰度評(píng)價(jià)函數(shù)。特南梯度。
在圖像處理中,一般認(rèn)為對(duì)焦好的圖像具有更尖銳的邊緣,故具有更大的梯度函數(shù)值。
Tenengrad函數(shù)使用Sobel算子提取水平和垂直方向的梯度值,求其平方和作為評(píng)價(jià)函數(shù)。
具體過(guò)程如下:
設(shè)Sobel卷積核為,則圖像在點(diǎn)處的梯度
定義該圖像的Tenengrad值為:(其中為圖像中像素總數(shù))這個(gè)求了平均
或不求平均:評(píng)價(jià)函數(shù)F(k):
其中:T是給定的邊緣檢測(cè)閾值。
?View Code
?
?Laplacian?梯度函數(shù)
利用Laplacian算子對(duì)圖像進(jìn)行模板卷積得到圖像的高頻分量,然后可以對(duì)圖像的高頻分量求和,用高頻分量和作為圖像的清晰度評(píng)價(jià)標(biāo)準(zhǔn)。
對(duì)于一個(gè)M×N像素的圖像,每個(gè)像素的亮度為g(x,y),進(jìn)行濾波模板卷積后每個(gè)像素點(diǎn)值為z(x,y)。則圖像清晰度評(píng)價(jià)函數(shù):
Laplacian算子:z(x,y)=g(x-1,y)+g(x+1,y)+g(x,y-1)+g(x,y+1)一4g(x,y)
梯度算子為水平方向和垂直方向兩個(gè),高通濾波算子只有一個(gè)
SMD(灰度差分絕對(duì)值之和,Sum of?Modulus of gray Difference?)函數(shù)
?用差分絕對(duì)值代替乘方和開方,即對(duì)點(diǎn)(x,y)及其鄰近點(diǎn)的灰度作差分運(yùn)算,提取該點(diǎn)灰度值的變化大小,得出圖像灰度差分絕對(duì)值之和算子。
灰度差分絕對(duì)值之和具有較好的計(jì)算性能,但其缺點(diǎn)也很明顯,即在焦點(diǎn)附近靈敏度不高,即該函數(shù)在極值點(diǎn)附近過(guò)于平坦,從而導(dǎo)致聚焦精度難以提高。
在文章《一種快速高靈敏度聚焦評(píng)價(jià)函數(shù)》中提出了一種新的評(píng)價(jià)函數(shù),稱之為灰度差分絕對(duì)值乘積法,即對(duì)每一個(gè)像素領(lǐng)域兩個(gè)灰度差相乘后再逐個(gè)像素累加。
?
“基于圖像處理的自動(dòng)對(duì)焦技術(shù)研究”,對(duì)焦過(guò)程中的一個(gè)重要階段是圖像清晰度評(píng)價(jià),博主自己用MATLAB實(shí)現(xiàn)了4類清晰度評(píng)價(jià)函數(shù):基于圖像梯度的清晰度評(píng)價(jià)函數(shù)、頻域評(píng)價(jià)函數(shù)、信息熵評(píng)價(jià)函數(shù)、統(tǒng)計(jì)學(xué)評(píng)價(jià)函數(shù),總計(jì)11種。博主之前沒(méi)有用過(guò)MATLAB,完全是本科論文需要,沒(méi)辦法對(duì)著別人的代碼生看,雖然沒(méi)學(xué)過(guò)matlab的基礎(chǔ)知識(shí),但是畢竟學(xué)過(guò)好幾門語(yǔ)言,都是差不多的,還是能看懂的。需要哪部分知識(shí)就在網(wǎng)上搜,雖然沒(méi)有一樣的,但是會(huì)搜到相關(guān)的,看懂了之后,實(shí)現(xiàn)自己的代碼。
其中基于圖像梯度的清晰度評(píng)價(jià)函數(shù)博主很大一部分借鑒他人上傳的畢設(shè)代碼,在此附上鏈接。
http://www.pudn.com/Download/item/id/1394579.html
一、基于圖像梯度的清晰度評(píng)價(jià)函數(shù)?
這類算法的實(shí)質(zhì)是圖像處理知識(shí),因?yàn)椴┲鲌?bào)考研究生時(shí)選的圖像處理方向,所以本科畢業(yè)論文找了一位這方面的指導(dǎo)老師。
正焦的清晰圖像比模糊的離焦圖像邊緣更加銳利清晰,邊緣像素灰度值變化大,因而有更大的梯度值。在進(jìn)行圖像處理時(shí),將圖像看作二維離散矩陣,利用梯度函數(shù)獲取圖像灰度信息,以此來(lái)評(píng)判圖像清晰度。在離散信號(hào)中梯度表現(xiàn)為差分形式。常用的梯度函數(shù)有:能量梯度函數(shù)EOG、Roberts函數(shù)、Tenengrad函數(shù)、Brenner函數(shù)、方差Variance函數(shù)、拉普拉斯Laplace函數(shù)等等。下面分別對(duì)其進(jìn)行介紹,其中表示對(duì)應(yīng)像素點(diǎn)的灰度值。
1.能量梯度函數(shù)(Energy of Gradient,EOG)
將 x 方向和 y 方向的相鄰像素的灰度值之差[]的平方和作為每個(gè)像素點(diǎn)的梯度值,對(duì)所有像素梯度值累加作為清晰度評(píng)價(jià)函數(shù)值,表達(dá)式如下所示:
matlab代碼如下:
%EOG(Energy Of Grad)
?N1 = 5; ? ? ?%要處理的圖片張數(shù)
?A = zeros(1,N1); ?%存儲(chǔ)每一幅圖像清晰度評(píng)價(jià)值
?X = zeros(1,N1); ?%存儲(chǔ)做歸一化處理后的評(píng)價(jià)值
tic ? ? %計(jì)時(shí)
for L=1: N1?
?I=imread([int2str(L),'.jpg']); %連續(xù)讀取圖片
?I=double(I);?
?[M N]=size(I);?
?FI=0;?
?for x=1:M-1?
? ? ?for y=1:N-1?
? ? ? ? ? % x方向和y方向的相鄰像素灰度值只差的的平方和作為清晰度值
? ? ? ? ?FI=FI+(I(x+1,y)-I(x,y))*(I(x+1,y)-I(x,y))+(I(x,y+1)-I(x,y))*(I(x,y+1)-I(x,y));
? ? ?end?
?end?
??
?A(1,L) = FI;?
end?
time=toc
%--------------------------------?
%對(duì)圖像清晰度值做歸一化處理,線性函數(shù)歸一化公式
?for W = 1:N1?
? ? ?C = max(A);?
? ? ?D = min(A);?
? ? ?E = C-D;?
? ? ?R = (A(1,W) - D)/(E);?
? ? ?X(1,W) = R;?
?end?
%做曲線擬合輸出函數(shù)曲線 ?
x1=[-20 -10 0 10 20 ];?
y1 = [X(1,1) X(1,2) X(1,3) X(1,4) X(1,5)];
[p,S]=polyfit(x1,y1,2);?
Y=polyconf(p,x1,y1);?
plot(x1,y1,'y');
hold on;
2.Roberts函數(shù)
Roberts函數(shù)與能量梯度函數(shù)相似,它是利用對(duì)角方向像素點(diǎn)灰度值之差。將4個(gè)相鄰像素點(diǎn)的灰度值交叉相減的平方和作為每個(gè)像素點(diǎn)的梯度值,對(duì)所有像素梯度值累加作為清晰度評(píng)價(jià)函數(shù)值,表達(dá)式如下式所示:
%Roberts
?N1 = 5;?
?A = zeros(1,N1);?
?X = zeros(1,N1);
?tic
?for L=1: N1?
?I=imread([int2str(L),'.jpg']);?
?I=double(I);?
?[M N]=size(I);?
?FI=0;?
?%Robert算子原理,對(duì)角方向相鄰的兩像素之差?
?for x=1:M-1?
? ? ?for y=1:N-1?
? ? ? ? ?FI= FI + (abs(I(x,y)-I(x+1,y+1))+abs(I(x+1,y)-I(x,y+1)));?
? ? ?end?
?end?
?A(1,L) = FI; ?
?end?
?time=toc
?
? for W = 1:N1?
? ? ?C = max(A);?
? ? ?D = min(A);?
? ? ?E = C-D;?
? ? ?R = (A(1,W) - D)/(E);?
? ? ?X(1,W) = R;?
?end?
?
x1=[-20 -10 0 10 20 ];?
y1 = [X(1,1) X(1,2) X(1,3) X(1,4) X(1,5)];
[p,S]=polyfit(x1,y1,2);?
Y=polyconf(p,x1,y1);?
plot(x1,y1,'c');?
hold on;
3.Tenengrad函數(shù)
采用Sobel算子提取像素點(diǎn)水平方向和垂直方向的梯度值,Tenengrad函數(shù)定義為像素點(diǎn)梯度的平方和,并為梯度設(shè)置一個(gè)閾值T調(diào)節(jié)函數(shù)的靈敏度。表達(dá)式如下式所示:
代碼:
%Tenengrad
?N1 =5;?
?A = zeros(1,N1);?
?X = zeros(1,N1);?
?tic
?for L=1: N1?
?I=imread([int2str(L),'.jpg']);?
?I=double(I);?
?[M N]=size(I);?
?%利用sobel算子gx,gy與圖像做卷積,提取圖像水平方向和垂直方向的梯度值
GX = 0; ? %圖像水平方向梯度值
GY = 0; ? %圖像垂直方向梯度值
FI = 0; ? %變量,暫時(shí)存儲(chǔ)圖像清晰度值
T ?= 0; ? %設(shè)置的閾值
?for x=2:M-1?
? ? ?for y=2:N-1?
? ? ? ? ?GX = I(x-1,y+1)+2*I(x,y+1)+I(x+1,y+1)-I(x-1,y-1)-2*I(x,y-1)-I(x+1,y-1);?
? ? ? ? ?GY = I(x+1,y-1)+2*I(x+1,y)+I(x+1,y+1)-I(x-1,y-1)-2*I(x-1,y)-I(x-1,y+1);?
? ? ? ? ?SXY= sqrt(GX*GX+GY*GY); %某一點(diǎn)的梯度值
? ? ? ? ?%某一像素點(diǎn)梯度值大于設(shè)定的閾值,將該像素點(diǎn)考慮,消除噪聲影響
? ? ? ? ?if SXY>T?
? ? ? ? ? ?FI = FI + SXY*SXY; ? ?%Tenengrad值定義
? ? ? ? ?end?
? ? ?end?
?end?
?A(1,L) = FI;?
?end?
?time=toc
?
% X = zeros(1,N1);?
?for W = 1:N1?
? ? ?C = max(A);?
? ? ?D = min(A);?
? ? ?E = C-D;?
? ? ?R = (A(1,W) - D)/(E);?
? ? ?X(1,W) = R;?
?end?
x1=[-20 -10 0 10 20 ];?
y1 = [X(1,1) X(1,2) X(1,3) X(1,4) X(1,5)];
[p,S]=polyfit(x1,y1,2);?
Y=polyconf(p,x1,y1);?
plot(x1,y1,'g');?
hold on;
?
4.Brenner函數(shù)
又稱梯度濾波器法,只需計(jì)算x方向上相差兩個(gè)像素點(diǎn)的差分,即計(jì)算二階梯度,計(jì)算量少,表達(dá)式如下所示:
代碼:
%Brenner
?N1 = 5; ? ? ? ? ? %N1為要處理的圖片張數(shù)
?A = zeros(1,N1); ? %zeros()定義指定行列的零矩陣;A矩陣用來(lái)存儲(chǔ)每一幅圖像的清晰度原值
?X = zeros(1,N1); ? %X用來(lái)存儲(chǔ)做歸一化處理后的函數(shù)值
?%------------------------------
?tic
?for L=1: N1 ? ? ? ?
?I=imread([int2str(L),'.jpg']); %讀取圖片,將值轉(zhuǎn)換為字符串接受向量和矩陣輸入
I=double(I); ? ? ? ? %精度存儲(chǔ)問(wèn)題
?[M N]=size(I); ? ? %M等于矩陣行數(shù),N等于矩陣列數(shù);size()獲取矩陣行列
?FI=0; ? ? ? ?%變量,暫時(shí)存儲(chǔ)每一幅圖像的Brenner值
?for x=1:M-2 ? ? ?%Brenner函數(shù)原理,計(jì)算相差兩個(gè)位置的像素點(diǎn)的灰度值
? ? ?for y=1:N?
? ? ? ? ?FI=FI+(I(x+2,y)-I(x,y))*(I(x+2,y)-I(x,y));?
? ? ?end?
?end?
?A(1,L) = FI;?
?end
?time=toc
?%對(duì)原始數(shù)據(jù)做歸一化處理,線性函數(shù)歸一化公式
? for W = 1:N1?
? ? ?C = max(A);?
? ? ?D = min(A);?
? ? ?E = C-D;?
? ? ?R = (A(1,W) - D)/(E);?
? ? ?X(1,W) = R;?
? end?
%曲線擬合
x1=[-20 -10 0 10 20 ];?
y1 = [X(1,1) X(1,2) X(1,3) X(1,4) X(1,5)];?
[p,S]=polyfit(x1,y1,2); ? %polyfit(x,y,n)曲線擬合函數(shù),已知離散點(diǎn)坐標(biāo)擬合曲線;x,y橫縱坐標(biāo),n為擬合階數(shù),一階直線擬合,二階拋物線擬合 ,返回冪次從高到低的多項(xiàng)式系數(shù)向量P,矩陣S用于生成預(yù)測(cè)值的誤差估計(jì)
Y=polyconf(p,x1,y1); %置信區(qū)間
plot(x1,y1,'r'); ? ? %畫出擬合曲線,紅線red
title('梯度評(píng)價(jià)函數(shù)');
xlabel('成像面位置');
ylabel('歸一化后的圖像清晰度評(píng)價(jià)值');
hold on;
5.Variance方差函數(shù)
Variance函數(shù)表示圖像灰度分布的離散程度。離焦圖像灰度值變換范圍小,離散程度低,方差小;正焦圖像灰度值變換范圍大,離散程度高,方差大。因此可以用其作為評(píng)價(jià)函數(shù),對(duì)于M*N大小的圖像表達(dá)式如下式所示:
?代碼:
%Variance
?N1 = 5;?
?A = zeros(1,N1);?
?X = zeros(1,N1);?
tic
?for L=1: N1
?I=imread([int2str(L),'.jpg']); ?
?I=double(I);?
?[M N]=size(I); ?
?gama = 0; ? %gama圖像平均灰度值
?%求gama
?for x=1:M?
? ? ?for y=1:N?
? ? ? ? ?gama = gama + I(x,y);?
? ? ?end?
?end?
?gama = gama/(M*N);?
??
?FI=0;?
?for x=1:M?
? ? ?for y=1:N?
? ? ? ? ?FI=FI+(I(x,y)-gama)*(I(x,y)-gama);?
? ? ?end?
?end?
? A(1,L) = FI;
?end?
?time=toc
?for W = 1:N1?
? ? ?C = max(A);?
? ? ?D = min(A);?
? ? ?E = C-D;?
? ? ?R = (A(1,W) - D)/(E);?
? ? ?X(1,W) = R;?
?end?
??
x1=[-20 -10 0 10 20 ];?
y1 = [X(1,1) X(1,2) X(1,3) X(1,4) X(1,5)];
?[p,S]=polyfit(x1,y1,2);?
?Y=polyconf(p,x1,y1);?
?plot(x1,y1,'b');
?hold on;
6.?Laplace拉普拉斯函數(shù)
采用Laplace算子與圖像各個(gè)像素點(diǎn)的灰度值進(jìn)行卷積得到一個(gè)梯度矩陣記為,取各像素點(diǎn)梯度的平方和作為評(píng)價(jià)函數(shù),如下式所示:
代碼:
%Laplace?
?N1 = 5;?
?A = zeros(1,N1);?
?X = zeros(1,N1);
?tic
?for L=1: N1?
?I=imread([int2str(L),'.jpg']);?
?I=double(I);?
?[M N]=size(I);?
?FI=0;?
?for x=2:M-1?
? ? ?for y=2:N-1?
? ? ? ? ?IXXIYY = -4*I(x,y)+I(x,y+1)+I(x,y-1)+I(x+1,y)+I(x-1,y);?
? ? ? ? ? ? ?FI=FI+IXXIYY*IXXIYY; ? ? ? ?%取各像素點(diǎn)梯度的平方和作為清晰度值 ? ?
? ? ?end?
?end ?
A(1,L) = FI;?
?end?
?time=toc
?
?for W = 1:N1?
? ? ?C = max(A);?
? ? ?D = min(A);?
? ? ?E = C-D;?
? ? ?R = (A(1,W) - D)/(E);?
? ? ?X(1,W) = R;?
?end?
?
x1=[-20 -10 0 10 20 ];?
y1 = [X(1,1) X(1,2) X(1,3) X(1,4) X(1,5)];
[p,S]=polyfit(x1,y1,2);?
Y=polyconf(p,x1,y1);?
plot(x1,y1,'m');?
hold off;
二:頻域評(píng)價(jià)函數(shù)
1.基于二維離散傅里葉變換的圖像清晰度評(píng)價(jià)函數(shù)
?其中,加權(quán)系數(shù)表示像素到中心像素的距離,其作用為強(qiáng)調(diào)頻譜中的高頻成分。因?yàn)閳D像經(jīng)過(guò)傅里葉變換和移位后,頻率分布為從中央到四周邊緣從低頻向高頻擴(kuò)散;M,N?為圖像尺寸;P(u,v)表示圖像的頻譜的平方。
代碼:
%DFT
N1 = 5; ? ? ?%N1要處理的圖像張數(shù) ? ? ? ?
A = zeros(1,N1); ?%A向量用來(lái)存儲(chǔ)每一幅圖像的清晰度原值
X = zeros(1,N1); ?%X用來(lái)存儲(chǔ)做歸一化處理后的清晰度函數(shù)值
%----------------------
tic
for L=1: N1 ? ? ? ?
I=imread([int2str(L),'.jpg']);?
I=rgb2gray(I);
I=double(I); ? ? ? ?
[M N]=size(I); ? ? ? ? ?
fftI = fft2(I); ? %進(jìn)行二維離散傅里葉變換
sfftI = fftshift(fftI); ? %移位,直流分量移到圖像中心
magnitude = abs(sfftI); ? ? ?%取模值
FI=0;?
for u=1:M
? ? for v=1:N
? ? ? ? FI=FI+sqrt(u*u+v*v)*magnitude(u,v); ? ? ?%基于離散傅里葉變換的清晰度評(píng)價(jià)函數(shù)
? ? end
end
A(1,L) = FI/(M*N);
end
time=toc
%對(duì)原始數(shù)據(jù)做歸一化處理,線性函數(shù)歸一化公式
%-------------------------
? for W = 1:N1?
? ? ?C = max(A);?
? ? ?D = min(A);?
? ? ?E = C-D;?
? ? ?R = (A(1,W) - D)/(E);?
? ? ?X(1,W) = R;?
? end?
%曲線擬合,0為正焦位置,離焦-正焦-離焦
x1=[-20 -10 0 10 20 ];?
y1 = [X(1,1) X(1,2) X(1,3) X(1,4) X(1,5)];
[p,S]=polyfit(x1,y1,2); ? %polyfit(x,y,n)曲線擬合函數(shù),已知離散點(diǎn)坐標(biāo)擬合曲線;x,y橫縱坐標(biāo),n為擬合階數(shù),一階直線擬合,二階拋物線擬合 ,返回冪次從高到低的多項(xiàng)式系數(shù)向量P,矩陣S用于生成預(yù)測(cè)值的誤差估計(jì)
Y=polyconf(p,x1,y1); %置信區(qū)間
plot(x1,y1,'b'); ? ? %畫出擬合曲線,紅線red
title('頻域評(píng)價(jià)函數(shù)');
xlabel('成像面位置');
ylabel('歸一化后的圖像清晰度評(píng)價(jià)值');
hold on;
?
2.離散余弦變換DCT
基于DFT的評(píng)價(jià)函數(shù)靈敏度高,但傅里葉變換系數(shù)是復(fù)數(shù),計(jì)算量大。離散余弦變換DCT對(duì)此進(jìn)行改進(jìn),變換系數(shù)是實(shí)數(shù),計(jì)算量減少且同樣可以表示圖像頻率分布信息。對(duì)于一幅M*N的圖像,基于離散余弦變換DCT變換的清晰度評(píng)價(jià)函數(shù)定義如下:
%DCT
N1 = 5; ? ? ?%N1要處理的圖像張數(shù) ? ? ? ?
A = zeros(1,N1); ?%A向量用來(lái)存儲(chǔ)每一幅圖像的清晰度原值
X = zeros(1,N1); ?%X用來(lái)存儲(chǔ)做歸一化處理后的清晰度函數(shù)值
%----------------------
tic
for L=1: N1 ? ? ? ?
I=imread([int2str(L),'.jpg']);?
I=rgb2gray(I);
I=double(I)+10*randn(size(I)); ? ? ? ?
[M N]=size(I); ? ? ? ? ?
dctI = dct2(I); ? %進(jìn)行二維離散傅里葉變換
magnitude = abs(dctI); ? ? ?%取模值
FI=0;?
for u=1:M
? ? for v=1:N
? ? ? ? FI=FI+(u+v)*magnitude(u,v); ? ? ?%基于離散傅里葉變換的清晰度評(píng)價(jià)函數(shù)
? ? end
end
A(1,L) = FI/(M*N);
end
time=toc
%對(duì)原始數(shù)據(jù)做歸一化處理,線性函數(shù)歸一化公式
%-------------------------
? for W = 1:N1?
? ? ?C = max(A);?
? ? ?D = min(A);?
? ? ?E = C-D;?
? ? ?R = (A(1,W) - D)/(E);?
? ? ?X(1,W) = R;?
? end?
%曲線擬合,0為正焦位置,離焦-正焦-離焦
x1=[-20 -10 0 10 20 ];?
y1 = [X(1,1) X(1,2) X(1,3) X(1,4) X(1,5)];?
[p,S]=polyfit(x1,y1,2); ? %polyfit(x,y,n)曲線擬合函數(shù),已知離散點(diǎn)坐標(biāo)擬合曲線;x,y橫縱坐標(biāo),n為擬合階數(shù),一階直線擬合,二階拋物線擬合 ,返回冪次從高到低的多項(xiàng)式系數(shù)向量P,矩陣S用于生成預(yù)測(cè)值的誤差估計(jì)
Y=polyconf(p,x1,y1); %置信區(qū)間
plot(x1,y1,'r'); ? ? %畫出擬合曲線,紅線red
hold off;
三、基于信息熵的清晰度評(píng)價(jià)函數(shù)
在信息論中,熵用來(lái)描述信息的豐富程度。信息熵評(píng)價(jià)函數(shù)基于正焦圖像中具有多樣性的灰度分布,像素灰度值分布區(qū)間廣,灰度值之間差異大,此時(shí)熵值大;離焦圖像正好相反。因此可以基于信息熵構(gòu)造清晰度評(píng)價(jià)函數(shù),定義如下:
代碼:?
%entropy
N1 = 5; ? ? ? ? ? %N1為要處理的圖片張數(shù)
A = zeros(1,N1); ? %zeros()定義指定行列的零矩陣;A矩陣用來(lái)存儲(chǔ)每一幅圖像的清晰度原值
X = zeros(1,N1); ? %X用來(lái)存儲(chǔ)做歸一化處理后的函數(shù)值
%處理圖片
tic
for L=1: N1 ? ? ? ?
?I=imread([int2str(L),'.jpg']); %讀取圖片,將值轉(zhuǎn)換為字符串接受向量和矩陣輸入
?I=rgb2gray(I);
?I=double(I);?
?A(1,L)=entr(I); ? ?%調(diào)用求熵值函數(shù)
end
time=toc
%對(duì)原始數(shù)據(jù)做歸一化處理,線性函數(shù)歸一化公式
?for W = 1:N1?
? ?C = max(A);?
? ?D = min(A);?
? ?E = C-D;?
? ?R = (A(1,W) - D)/(E);?
? ?X(1,W) = R;?
? end?
x1=[-20 -10 0 10 20 ];?
y1 = [X(1,1) X(1,2) X(1,3) X(1,4) X(1,5)];?
[p,S]=polyfit(x1,y1,2); ? %polyfit(x,y,n)曲線擬合函數(shù),已知離散點(diǎn)坐標(biāo)擬合曲線;x,y橫縱坐標(biāo),n為擬合階數(shù),一階直線擬合,二階拋物線擬合 ,返回冪次從高到低的多項(xiàng)式系數(shù)向量P,矩陣S用于生成預(yù)測(cè)值的誤差估計(jì)
Y=polyconf(p,x1,y1); %置信區(qū)間
plot(x1,y1,'r'); ? ? %畫出擬合曲線,紅線red
title('基于信息熵的評(píng)價(jià)函數(shù)');
xlabel('成像面位置');
ylabel('歸一化后的圖像清晰度評(píng)價(jià)值');
?
?
%定義子函數(shù)entr(),求一幅圖像的熵值
%-------------------------------------------
function[H_img]= entr(I) ??
[C,R]=size(I); %求圖像的規(guī)格
Img_size=C*R; %圖像像素點(diǎn)的總個(gè)數(shù)
L=256; %圖像的灰度級(jí)0-255
H_img=0; ?%圖象熵
nk=zeros(L,1); %存儲(chǔ)圖像灰度出現(xiàn)次數(shù)
for i=1:C
for j=1:R
Img_level=I(i,j)+1; %獲取圖像的灰度級(jí)
nk(Img_level)=nk(Img_level)+1; %統(tǒng)計(jì)每個(gè)灰度級(jí)像素的點(diǎn)數(shù)
end
end
for k=1:L
Ps(k)=nk(k)/Img_size; %計(jì)算每一個(gè)灰度級(jí)像素點(diǎn)所占的概率
if Ps(k)~=0 %去掉概率為0的像素點(diǎn)
H_img=-Ps(k)*log2(Ps(k))+H_img; %求熵值的公式
end
end
end
?
四、基于統(tǒng)計(jì)學(xué)的清晰度評(píng)價(jià)函數(shù)
1.Range函數(shù)
Range函數(shù)基于灰度直方圖中灰度帶的變化大小反映清晰度,定義如下所示:
?代碼:
%Range
N1 =5;?
gray_level = 32; %灰度直方圖中劃分的灰度等級(jí)
temp=zeros(1,gray_level);
A = zeros(1,N1); ?
X = zeros(1,N1);
tic
for L=1: N1 ? ? ? ?
?I=imread([int2str(L),'.jpg']); %讀取圖片,將值轉(zhuǎn)換為字符串接受向量和矩陣輸入
?I=rgb2gray(I);?
?I=double(I); ? %-------沒(méi)做數(shù)值類型,出錯(cuò),曲線相反----------
?[count,K] = imhist(I,gray_level);%imhist()畫灰度分布直方圖,count表示某一灰度區(qū)間的像素個(gè)數(shù),K表示灰度區(qū)間取值
?for y=1:gray_level?
? temp(1,y)=count(y)*K(y);
?end
?A(1,L)=max(temp)-min(temp);
end
time=toc
for W = 1:N1?
? ? ?C = max(A);?
? ? ?D = min(A);?
? ? ?E = C-D;?
? ? ?R = (A(1,W) - D)/(E);?
? ? ?X(1,W) = R;?
end?
x1=[-20 -10 0 10 20 ];?
y1 = [X(1,1) X(1,2) X(1,3) X(1,4) X(1,5)];
[p,S]=polyfit(x1,y1,2); ? %polyfit(x,y,n)曲線擬合函數(shù),已知離散點(diǎn)坐標(biāo)擬合曲線;x,y橫縱坐標(biāo),n為擬合階數(shù),一階直線擬合,二階拋物線擬合 ,返回冪次從高到低的多項(xiàng)式系數(shù)向量P,矩陣S用于生成預(yù)測(cè)值的誤差估計(jì)
Y=polyconf(p,x1,y1); %置信區(qū)間
plot(x1,y1,'g'); ? ? %畫出擬合曲線,紅線red
title('統(tǒng)計(jì)學(xué)評(píng)價(jià)函數(shù)');
xlabel('成像面位置');
ylabel('歸一化后的圖像清晰度評(píng)價(jià)值');
hold on
2?Vollaths函數(shù)
Vollaths函數(shù)又稱自相關(guān)函數(shù),反映空間兩點(diǎn)的相似性。正焦圖像邊緣清晰銳利,像素點(diǎn)之間相關(guān)程度低;離焦圖像像素點(diǎn)相關(guān)程度高。清晰度評(píng)價(jià)函數(shù)如下所示:
?.代碼:
%vollaths
?N1 = 5; ? ? ? ? ? %N1為要處理的圖片張數(shù)
?A = zeros(1,N1); ? %zeros()定義指定行列的零矩陣;A矩陣用來(lái)存儲(chǔ)每一幅圖像的清晰度原值
?X = zeros(1,N1); ? %X用來(lái)存儲(chǔ)做歸一化處理后的函數(shù)值
?%用一個(gè)for循環(huán)處理每一張圖片
?tic
?for L=1: N1 ? ? ? ?
?I=imread([int2str(L),'.jpg']); %讀取圖片,將值轉(zhuǎn)換為字符串接受向量和矩陣輸入
?I=double(I); ? ? ? ?%精度存儲(chǔ)問(wèn)題
?[M N]=size(I); ? ? %M等于矩陣行數(shù),N等于矩陣列數(shù);size()獲取矩陣行列數(shù)
?%begintime=clock;?
??
?FI=0; ? ? ? ?%變量,暫時(shí)存儲(chǔ)每一幅圖像的Brenner值
?for x=1:M-2 ? ? ?%Brenner函數(shù)原理,計(jì)算相差兩個(gè)位置的像素點(diǎn)的灰度值
? ? ?for y=1:N?
? ? ? ? ?FI=FI+I(x,y)*abs(I(x+1,y)-I(x+2,y));?
? ? ?end?
?end?
?%time=etime(clock,begintime);?
?A(1,L) = FI;?
?end?
?time=toc
?%對(duì)原始數(shù)據(jù)做歸一化處理,線性函數(shù)歸一化公式
? for W = 1:N1?
? ? ?C = max(A);?
? ? ?D = min(A);?
? ? ?E = C-D;?
? ? ?R = (A(1,W) - D)/(E);?
? ? ?X(1,W) = R;?
? end?
?
x1=[-20 -10 0 10 20 ];?
y1 = [X(1,1) X(1,2) X(1,3) X(1,4) X(1,5)];
[p,S]=polyfit(x1,y1,2); ? %polyfit(x,y,n)曲線擬合函數(shù),已知離散點(diǎn)坐標(biāo)擬合曲線;x,y橫縱坐標(biāo),n為擬合階數(shù),一階直線擬合,二階拋物線擬合 ,返回冪次從高到低的多項(xiàng)式系數(shù)向量P,矩陣S用于生成預(yù)測(cè)值的誤差估計(jì)
Y=polyconf(p,x1,y1); %置信區(qū)間
plot(x1,y1,'r'); ? ? %畫出擬合曲線,紅線red
hold off
以下是博主的仿真結(jié)果:
梯度
頻域
信息熵
統(tǒng)計(jì)學(xué)
?初次接觸這方面的內(nèi)容,不足之處,請(qǐng)諒解。
總結(jié)
以上是生活随笔為你收集整理的11种图像清晰度评价函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 最简单、图解:阿里云服务器上装 Dock
- 下一篇: 一种新的图像清晰度评价函数