结构张量(structure tensor)

在数学中,结构张量(也称为第二矩矩阵)是从函数的梯度导出的矩阵。它总结了一个点的指定邻域中梯度的主要方向,以及这些方向是连贯的程度。结构张量常用于图像处理和计算机视觉。————*

结构张量能区分图像的平坦区域、边缘区域与角点区域。

结构张量就是一个关于图像的结构矩阵,如下所示

结构张量(structure tensor)

Ix,Iy分别表示图像的水平梯度与垂直梯度。而后分别用K与H表示矩阵ST的行列式与迹。

根据所求的K与H的值,可判断当前像素点所处的位置是属于平坦区域、边缘区域和角点区域中的一个。

判断的条件:

平坦区域:H = 0;

边缘区域:H > 0 && K = 0;

角点区域:H > 0 && K > 0;

然而在实际应用中,H与K的值都不会太理想,所以用的是近似判断。

效果如下:

原图:

结构张量(structure tensor)

边缘区域:

结构张量(structure tensor)

平坦区域:

结构张量(structure tensor)

角点区域:

结构张量(structure tensor)

行列式与迹的关系:

结构张量(structure tensor)

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');   %自动调整输出格式