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

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]);
        *********************************************************************
主站蜘蛛池模板: 涡阳县| 易门县| 嘉荫县| 渭源县| 武山县| 和龙市| 宁海县| 朝阳市| 隆尧县| 清丰县| 扎囊县| 东源县| 昔阳县| 翼城县| 淳化县| 长兴县| 崇阳县| 皋兰县| 萨迦县| 崇礼县| 永昌县| 获嘉县| 台湾省| 黑河市| 奉贤区| 烟台市| 陆河县| 桐柏县| 鄂尔多斯市| 布尔津县| 新乡市| 肥西县| 仲巴县| 德令哈市| 正镶白旗| 滨海县| 洛阳市| 镇安县| 大姚县| 鄂尔多斯市| 正蓝旗|