结构张量(structure tensor)
在数学中,结构张量(也称为第二矩矩阵)是从函数的梯度导出的矩阵。它总结了一个点的指定邻域中梯度的主要方向,以及这些方向是连贯的程度。结构张量常用于图像处理和计算机视觉。————*
结构张量能区分图像的平坦区域、边缘区域与角点区域。
结构张量就是一个关于图像的结构矩阵,如下所示
Ix,Iy分别表示图像的水平梯度与垂直梯度。而后分别用K与H表示矩阵ST的行列式与迹。
根据所求的K与H的值,可判断当前像素点所处的位置是属于平坦区域、边缘区域和角点区域中的一个。
判断的条件:
平坦区域:H = 0;
边缘区域:H > 0 && K = 0;
角点区域:H > 0 && K > 0;
然而在实际应用中,H与K的值都不会太理想,所以用的是近似判断。
效果如下:
原图:
边缘区域:
平坦区域:
角点区域:
行列式与迹的关系:
matlab代码如下所示:
%Image Structure Tensor 图像结构张量
close all;
clc;
I = double(rgb2gray(imread('lena.jpg')));
%figure;
%imshow(I);
[m,n] = size(I);
%the gradient of image
[Ix,Iy] = gradient(I);
%second derivative
Ix2 = Ix.^2;
Iy2 = Iy.^2;
Ixy = Ix.*Iy;
k = 1;
%relationship between det and trace
lam = zeros(m*n,2);
for i = 1:m
for j = 1:n
%Structure Tensor Matrix
ST = [Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)];
K = det(ST); %det of ST
H = trace(ST); %trace of ST
% if H < 50 %smooth area
% I(i,j) = 255;
% end
% if H > 50 && abs(K) < 0.01*10^(-9) %marginal area
% I(i,j) = 255;
% end
if H > 50 && abs(K) > 0.01*10^(-9) %corner are
I(i,j) = 255;
end
lam(k,:) = [K,H];
k = k + 1;
end
end
figure;
plot(lam(:,1),lam(:,2),'.');
ylabel('trace');
xlabel('det');
figure;
imshow(I,[]),title('corner area'); %自动调整输出格式