维基百科http://en.wikipedia.org/wiki/Hessian_matrix将其定义为函数的二阶偏导数的方阵。
谁能告诉我这是对的吗?
[i,j]=gradient(im);
filt1=(1./2).*[1,0,-1;0,0,0;1,0,-1];
filt2=(1./2).*[-1,0,-1;0,0,0;1,0,1];
ii=(conv2(filt1,i));
jj=(conv2(filt2,j));
Gx=conv2(ii,im); % Gradient of the image in x-axis
Gy=conv2(jj,im); % Gradient of the image in y-axis
dif_Gx = conv2(f_x,a); % Gradient differentiation of the image in x-axis
dif_Gy = conv2(f_y,a); % Gradient differentiation of the image in y-axis
% Calculate second derivative
Gxx = Gx.^2;
Gyy = Gy.^2;
Gxy = Gx.*Gy;发布于 2015-02-17 02:32:37
我尝试了上面提出的@Matt J的方法,似乎代码有维度不匹配的问题。我将第三行和第四行修改为
Hxx(2:m-1,1:end) = diff(im,2,1);
Hyy(1:end,2:n-1) = diff(im,2,2);现在它起作用了。
发布于 2014-02-05 22:38:42
每个像素的Hessian矩阵将是[Hxx, Hxy; Hyx, Hyy]形式的2x2矩阵。您可以通过执行以下操作在所有像素上以矢量化的方式计算这些数据值:
[m,n]=size(im);
[Hxx,Hyy,Hxy,Hyx]=deal(zeros(m,n));
Hxx(2:m-1,2:n-1) = diff(im,2,1);
Hyy(2:m-1,2:n-1) = diff(im,2,2);
tmp = diff(diff(im,1,1),1,2);
Hxy(2:m-1,2:n-1) = tmp(2:end,2:end);
tmp = diff(diff(im,1,2),1,1);
Hyx(2:m-1,2:n-1) = tmp(2:end,2:end);这些计算假设您对单边差异感到满意。您还可以将im与中心差分核进行卷积,例如k = [1 0 -1],以近似一阶导数,然后第二次卷积以获得二阶导数。
https://stackoverflow.com/questions/21578399
复制相似问题