很多算法都用到了這個矩陣,比如Hessian affine region detector、SURF,雖然這些算法我還沒有完全搞透,不過那都是后話,先把這個矩陣搞出來再說,學習是不斷迭代的過程。
整個矩陣的形成主要由四部分公式決定:
g(x,y)就是高斯函數了,沒啥可說的:
對高斯函數的x和y分別求二階偏導:
求出的模板對原圖進行卷積:
卷積后的值構成Hessian矩陣:
所以這里的H是相當於原圖像每一個像素都能求出一個Hessian矩陣。
matlab代碼如下:
clear all; close all; clc; img=double(imread('lena.jpg')); [m n]=size(img); w=4; sigma=1.2; [x y]=meshgrid(-w:w,-w:w); %高斯函數對應的二階偏導,如何求導數請自行腦補 Dxx = 1/(2*pi*sigma^4)*(x.^2/sigma^2-1)*exp(-(x.^2+x.^2)/(2*sigma^2)); Dyy = 1/(2*pi*sigma^4)*(y.^2/sigma^2-1)*exp(-(x.^2+y.^2)/(2*sigma^2)); Dxy = 1/(2*pi*sigma^6)*(x.*y)*exp(-(x.^2+y.^2)/(2*sigma^2)); Ixx=imfilter(img,Dxx,'replicate'); Iyy=imfilter(img,Dyy,'replicate'); Ixy=imfilter(img,Dxy,'replicate'); H=cell(m,n); for i=1:m for j=1:n H{i,j}=[Ixx(i,j) Ixy(i,j);Ixy(i,j) Iyy(i,j)]; end end