官术网_书友最值得收藏!

1.2 從向量相關角度實現圖像匹配

1.2.1 基于相關運算圖像匹配的過程

基于相關運算的圖像匹配技術可以直接用于在一幅圖像中尋找某個子圖,并確定子圖的位置。對于大小為M×N的圖像fx,y)和大小為J ×K的子圖模板wx,y),fx,y)與wx,y)的相關運算可以表示為:

其中,x=1,2, …,NK+1,y=1,2, …,MJ+1。子圖模板wx,y)的原點設置在子圖像的左上角。

計算相關cx,y)的過程就是在圖像fx,y)中逐點地移動子圖像wx,y),使wx,y)的原點和圖像fx,y)中點(x,y)重合,然后計算wx,y)與fx,y)中被wx,y)覆蓋的圖像區域對應像素的乘積之和,以此計算結果作為相關圖像cx,y)在點(x,y)處的響應。

相關可用于在圖像fx,y)中找到與子圖像wx,y)匹配的所有位置。實際上,當wx,y)按照上述描述的過程移過整幅圖像fx,y)之后,最大的響應點(x0,y0)即為最佳匹配的左上角點。也可以設定一個閾值T,認為響應值大于該閾值點的均是可能匹配的位置。

1.2.2 在向量空間分析圖像相關匹配

相關的計算是通過將圖像元素和子模式圖像元素聯系起來獲得的,將相關元素相乘后再累加。完全可以將子圖像wx,y)視為一個按行或按列存儲的向量,將計算過程中被wx,y)覆蓋的圖像區域視為另一個按照同樣方式存儲的向量。這樣一來,相關運算就成了向量之間的點積運算。

兩個向量的點積為:

其中,θ為向量之間的夾角。顯然,當具有完全相同的方向(平行)時,cosθ=1,從而式(1.2.1)取得其最大值,這就意味著當圖像的局部區域類似于子圖像模式時,相關運算產生最大的響應。然而,式(1.2.1)最終的取值還與自身的模有關,這將導致式(1.2.1)計算的相關響應存在著對fx,y)和wx,y)的灰度幅值比較敏感的缺陷。這樣一來,在fx,y)的高灰度區,可能其內容與子圖像wx,y)的內容并不相近,但由于自身較大而產生一個很高的響應。可通過對向量以其模值來歸一化解決這個問題,即通過式(1.2.2)來計算。

1.2.3 基于向量相關的圖像匹配的MATLAB實現

【例1.2.1】 實現基于向量相關的圖像匹配。

        *********************************************************************
        function Icorr= imcorr(I, w)
        % 功能:實現基于向量相關的圖像匹配
        % 輸入:I——輸入的圖像
        %      w——模板圖像
        % 輸出:Icoor——相關系數矩陣
        if nargin~= 2                     %檢查輸入的個數是否正確
            error('請輸入兩幅圖像 ')
        end
        if size(I,3)== 3                  %檢查圖像是否是灰度圖像,如果是RGB圖像,則將其
                                           %轉換成灰度圖像
            I = rgb2gray(I);
        end
        if size(w,3)== 3
            w = rgb2gray(w);
        end
        [m, n]=size(I);
        [m0, n0]=size(w);
        Icoor=zeros(m-m0+1, n-n0+1);      %為相關系數圖像分配空間,以提高運算效率
        vecW=double(w(:));                 %按列存儲為向量
        normW=norm(vecW);                  %對應的向量模
        for ii=1:m-m0+1
            for jj=1:n-n0+1
                subMat=I(ii:ii+m0-1, jj:jj+n0-1);
                vec=double(subMat(:));     %按列存儲為向量
                Icorr(ii, jj)=vec'*vecW/(norm(vec)*normW+eps);   %計算當前位置的相關系數
            end
        end
        %找出最大響應位置
        [iMaxRes, jMaxRes]=find(Icorr==max(Icorr(:)));
        figure,
        imshow(I)
        hold on
        for ii=1:length(iMaxRes)
            plot(jMaxRes(ii), iMaxRes(ii), '* ');
            %用矩形框標記出匹配區域
            plot([jMaxRes(ii), jMaxRes(ii)+n0-1], [iMaxRes(ii), iMaxRes(ii)]);
            plot([jMaxRes(ii)+n0-1, jMaxRes(ii)+n0-1], [iMaxRes(ii), iMaxRes(ii)+m0-1]);
            plot([jMaxRes(ii), jMaxRes(ii)+n0-1], [iMaxRes(ii)+m0-1, iMaxRes(ii)+m0-1]);
            plot([jMaxRes(ii), jMaxRes(ii)], [iMaxRes(ii), iMaxRes(ii)+m0-1]);
        *********************************************************************
主站蜘蛛池模板: 甘洛县| 夏河县| 休宁县| 湄潭县| 香港| 偃师市| 东山县| 肥西县| 沅江市| 平利县| 鹤峰县| 黑山县| 洛隆县| 康平县| 惠水县| 洪洞县| 钟山县| 东乡县| 阳原县| 枣阳市| 中宁县| 青冈县| 潞西市| 棋牌| 三江| 睢宁县| 丽水市| 彭州市| 台湾省| 界首市| 星子县| 监利县| 崇州市| 汝州市| 伊春市| 安达市| 霍州市| 察哈| 平湖市| 淳化县| 砚山县|