普通的直方圖就是統計圖像中像素灰度出現的次數。
二維直方圖的其中一維就是普通的直方圖,即統計圖像中像素灰度出現的次數。
另一維的概念就比較模糊了,我看很多論文中都是用的當前像素鄰域均值灰度出現的次數。按照這個意思,其實用當前像素鄰域中值灰度出現的次數也是可以的。或者用什么厲害的算法處理一下,在統計出現灰度的次數也是可以的。所以按照這樣推廣,其實構成N維直方圖也是未嘗不可的。
至於有什么用處嘛,我還需要再研究研究。
lena的二維直方圖,1維是普通直方圖,2維是半徑為1的鄰域均值直方圖:
matlab代碼如下:
1 clear all; 2 close all; 3 clc; 4
5 img=imread('lena.jpg'); 6 [m n]=size(img); 7 r=1; %鄰域半徑 8
9 imgn=zeros(m+2*r+1,n+2*r+1); 10 imgn(r+1:m+r,r+1:n+r)=img; 11
12 imgn(1:r,r+1:n+r)=img(1:r,1:n); %擴展上邊界 13 imgn(1:m+r,n+r+1:n+2*r+1)=imgn(1:m+r,n:n+r); %擴展右邊界 14 imgn(m+r+1:m+2*r+1,r+1:n+2*r+1)=imgn(m:m+r,r+1:n+2*r+1); %擴展下邊界 15 imgn(1:m+2*r+1,1:r)=imgn(1:m+2*r+1,r+1:2*r); %擴展左邊界 16
17 Hist=zeros(256,256); 18 for i=1+r:r+m 19 for j=1+r:r+n 20 pix1=uint8(imgn(i,j)); 21 pix2=uint8(mean2(imgn(i-r:i+r,j-r:j+r))); 22 Hist(pix1+1,pix2+1)=Hist(pix1+1,pix2+1)+1; 23 end 24 end 25 mesh(double(Hist))