图像处理中 结构张量(structure tensor)
结构张量(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,[]);