MATLAB与图像处理(一):图像中结构张量的求法(Structure Tensor)

1.结构张量的作用:
      能够区分图像中的平坦区域,边缘,角点;
2.图像中的结构张量的定义
   1)是一个矩阵;
   2)与图像的水平,垂直梯度有关,定义如下:
MATLAB与图像处理(一):图像中结构张量的求法(Structure Tensor)_第1张图片
在MATLAB中,可以用如下语句求解:[Ix,Iy]=gradient(Image);

3)求出结构张量矩阵的行列式,和迹(矩阵对角线之和)
  行列式:K=det(E);
  迹:       H=trace(E);


以下代码来源于网络,注释除外
[python] view plain copy
  1. clear all;  
  2. close all;  
  3. clc;  
  4. I=imread('lena.jpg');  
  5. img=double(I);  
  6. [m,n]=size(img);  
  7.   
  8. [Ix,Iy]=gradient(img);  %求出图像的梯度  
  9. Ix2=Ix.^2;  
  10. Iy2=Iy.^2;  
  11. Ixy=Ix.*Iy;  
  12.   
  13. k=1;  
  14. lambda=zeros(m*n,2);   %用于存储结构张量中的行列式与迹  
  15.   
  16. for i=1:m  
  17.     for j=1:n  
  18.         st=[Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)];%结构张量  
  19.         K=det(st);  % 行列式  
  20.         H=trace(st);%求迹  
  21.           
  22.         if H<50  
  23.             I(i,j)=255;  
  24.         end  
  25.         if H>50 &&abs(K)<0.01*10^(-9)  
  26.             I(i,j)=100;  
  27.         end  
  28.           
  29.          if H>50 &&abs(K)>0.01*10^(-9)  
  30.             I(i,j)=50;  
  31.          end  
  32.         lambda(k,:)=[K H];  
  33.         k=k+1;  
  34.     end  
  35. end  
  36. figure;  
  37. plot(lambda(:,1),lambda(:,2),'.');  
  38. ylabel('trace');  
  39. xlabel('det');  
  40. figure;  
  41. imshow(I)  

[plain] view plain copy
  1.   



     

你可能感兴趣的:(MATLAB与图像处理(一):图像中结构张量的求法(Structure Tensor))