圖像處理中 結構張量(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,[]);

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM