結構張量(structure tensor) 主要用於區分圖像的平坦區域、邊緣區域與角點區域。
此處的張量就是一個關於圖像的結構矩陣,矩陣結構構成如下:

Rx,Ry分別為圖像的水平與垂直梯度,而后進行求矩陣T的行列式K與跡(trace)H。
根據K與H的關系來求得區分圖像的平坦、邊緣與角點區域:
平坦區域:H=0;
邊緣區域:H>0 && K=0;
角點區域:H>0 && K>0;
該方法實際應用實例如下:
原圖:
邊緣區域:

邊緣區域中 行列式與跡的關系圖:

matlab實現代碼如下:
clc;
clear;
img=double(imread('F:\Users\Revere\Pictures\CameraRoll\imgwork\smile.png'));
[m n]=size(img);
imshow(img,[]);
[Ix Iy]=gradient(img);
Ix2=Ix.^2;
Iy2=Iy.^2;
Ixy=Ix.*Iy;
k=1;
lambda=zeros(m*n,2);
for i=1:m
for j=1:n
st=[Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)]; %結構張量
K=det(st);
H=trace(st); %求跡
%所有判斷都是近似的
% if H<50 %認為是平坦區域
if H>50 && abs(K)<0.01*10^(-9) %認為是邊緣區域
% if H>50 && abs(K)>0.01*10^(-9) %認為是角點區域
img(i,j)=255;
end
lambda(k,:)=[K,H];
k=k+1;
end
end
figure;
plot(lambda(:,1),lambda(:,2),'.');
ylabel('trace');
xlabel('det');
figure;
imshow(img,[]);
