结构张量用于区分平坦、边缘、角点区域
生活随笔
收集整理的這篇文章主要介紹了
结构张量用于区分平坦、边缘、角点区域
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.結構張量原理
此處所說的張量不是相對論或黎曼幾何里的張量,黎曼幾何的張量好多論文都叫張量場了。也不是數(shù)學界還沒研究明白的對矩陣進行擴展的高階張量,主要是張量分解。這里的結構張量就是一個矩陣,一個對圖像像素進行組織的數(shù)據結構而已。像素組織而成的矩陣如下:
這個公式太常見了,在harris角點檢測中就用到了。其中Ix,Iy就是原對原圖像在x和y方向求得的偏導。然后求矩陣E的行列式K和跡H。然后根據K和H的關系就能區(qū)分圖像的區(qū)域模式了。
模式分以下三類:
平坦區(qū)域:H=0;
邊緣區(qū)域:H>0 && K=0;
角點區(qū)域:H>0 && K>0;
harris角點檢測就用到了第三類判斷。
當然,在實際應用的時候H和K的值肯定都不會是理想,所以我用的都是近似判斷。
結構張量行列式與跡的關系:
其中紅框為平坦區(qū)域,黃框為邊緣區(qū)域,綠框為角點區(qū)域。
2.MATLAB代碼仿真
clear all; close all; clc;img=double(imread('lena.jpg')); [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:mfor 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 %認為是平坦區(qū)域% if H>50 && abs(K)<0.01*10^(-9) %認為是邊緣區(qū)域if H>50 && abs(K)>0.01*10^(-9) %認為是角點區(qū)域img(i,j)=255;endlambda(k,:)=[K H];k=k+1;end endfigure; plot(lambda(:,1),lambda(:,2),'.'); ylabel('trace');xlabel('det');figure; imshow(img,[])3.實驗結果
原始圖像 ?? ?? ?
平坦區(qū)域 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?邊緣區(qū)域 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?角點區(qū)域 ? ?? 與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的结构张量用于区分平坦、边缘、角点区域的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自入行C++程序设计以来
- 下一篇: Visual Studio集成Qt环境搭