Matlab數字圖像處理之圖像運算

        由於這段時間在做一個圖像處理與三維重建的項目,其中數字圖像處理的知識是必不可少的,學習matlab也有一段時間了,所以現在抽點時間將這段時間所學的東西做個小總結,加深理解的同時也方便以後有需要時可以查看一下。
         圖像運算是圖像處理中常用的處理方法,它以圖像爲單位進行操作,運算的結果是一副新的圖像,常常用於圖像的高級處理(如圖像分割,目標的檢測和識別等)的前期處理。具體的圖像運算包括點運算,代數運算,幾何運算和鄰域運算。點運算常用於改變圖像的灰度範圍及分佈,從而改善圖像的效果,代數運算常用於醫學圖像的處理以及圖像誤差檢測,幾何運算在圖像配準,校正等方面有重要用途,鄰域運算主要用在圖像濾波和形態學運算方面。
        在Matlab中,數字圖像的數據是以矩陣形式存放的,矩陣的每一個元素值對應着一個像素點的像素值,這樣一來,對圖像的運算就相當於對數據矩陣進行運算。下面用matlab的具體圖像運算實例進行介紹:


圖像的(線性)點運算:

           在圖像處理中,點運算是一種簡單而又很重要的技術,對於一副輸入圖像,若輸出圖像的每個像素點的灰度值由輸入像素點決定,則這樣的圖像變換就成爲圖像的點運算。

        A = imread('1.jpg');   %括號內爲圖像的輸入具體路徑
        figure(1);                    %圖像顯示窗口
        imshow(A);                %輸出圖像A
        B = A +50;                %A圖像的灰度值增加50,成爲新的圖像B
        figure(2);
        imshow(B);           %輸出圖像B
        C= 1.5 * A;             %A圖像的對比度增強,成爲新的圖像C
        figure(3);
        imshow(C);            %輸出圖像C
         D = 0.8 * A;            %圖像對比度減弱,成爲新的圖像D
         figure(4);
         imshow(D);             %輸出圖像D
         E = -double(A) + 255;      %對圖像A進行求補,但要注意先把A的類型轉化爲double型,實際是E = -1 * A + 255;
        figure(5);
        imshow(uint8(E));                   %輸出時注意將圖像轉爲原來的 uint8 類型

圖像的代數運算:

           圖像的代數運算是指對兩幅或兩幅以上的輸入圖像進行加減乘除四則運算,它在圖像處理中有着廣泛的應用,加法運算可以用來降低圖像中的隨機噪聲,減法運算可以用來減去背景,運動背景,進行梯度幅度運算,乘法運算通常用來進行掩模運算,除法運算可以用來歸一化。
          圖像加法:   
                     A  = imread('1.jpg');
                     B  = imread('2.jpg');
                     C  = imadd(A,B);            %將A,B兩幅圖像進行相加得到新的圖像C
          圖像減法:
                     
                     A  = imread('1.jpg');
                     B  = imread('2.jpg');
                     C  = imsubtract(A,B);            %將A,B兩幅圖像進行相減得到新的圖像C
     圖像乘法:
                   
                     A  = imread('1.jpg');
                     B  = imread('2.jpg');
                     C  = immultiply(A,B);            %將A,B兩幅圖像進行相乘得到新的圖像C
    圖像除法:
                               
                     A  = imread('1.jpg');
                     B  = imread('2.jpg');
                     C  = imdivide(A,B);            %將A,B兩幅圖像進行相除得到新的圖像C


像的幾何運算:

             爲了達到某種視覺效果,變換輸入圖像的像素位置,通過把輸入圖像的像素位置映射到一個新的位置達到改變原圖像的顯示效果的目的,這一過程成爲圖像的幾何運算,圖像的幾何運算主要是指對圖像進行幾何校正,空間變換(縮放,旋轉,仿射變換)等運算過程。
                    
            圖像的縮放實際上是通過對圖像進行插值來實現的,也就是通過增加或減少圖像矩陣的行列數來實現對圖像的放大和縮小操作,一般常用的插值方法有四種:分別是最近鄰插值(nearest),線性插值(linear),三次樣條插值(spline),和立方插值(cubic)。
           matlab中實現插值的函數是interp2,其語法格式爲: 
                   A = interp2(B, X, Y,method);                   %其中B爲原圖像,X 和Y爲圖像的新的行數和列數,method爲上面說的四種插值方法
                   A = interp2(B, ntime, method);              %其中B爲原圖像,ntime爲縮放倍數,method爲上面說的四種插值方法
                  例如:   B = imread('1.jpg');
                                 A = interp2(B ,200,300,' nearest ' );           %採用最近鄰插值法將圖像B轉換爲 [200,300] 的新圖像A
                                 C = interp2(B , 2,' linear');                             %採用線性插值法將圖像B增大2倍,成爲新圖像C
                                 D = interp2(B , 300,500,' spline' );             % 採用三次樣條法 將圖像B轉換爲 [300,500] 的新圖像D
                                 E  = interp2(B, 0.8,'cubic');                         % 採用立方插值法將圖像B 縮小爲0.8倍的新圖像E
                     
                  

圖像的鄰域運算:

             鄰域運算主要作用是對圖像進行空域濾波,比如平滑,中值濾波以及邊緣檢測等,此外,鄰域運算還可以對結構圖像進行細化。
                      
平滑: 平滑的目的是消除或儘量減少噪聲,改善圖像的質量。在matlab中用imfilter函數進行平滑操作,B  = imfilter(A, h); 其中A爲原圖像,h表示卷積核。  
              A  = imread('1.jpg');
              h = ones(3,3)/5;              %制定卷積核
              h(1,1) = 0;
              h (1,3) =0;
              h(3,1) = 0;
              h(1,3) = 0;
             B  = imfilter(A,h);               %平滑處理
             figure(1);
            imshow(B);   
中值濾波:
              中值濾波用一個含有奇數點的滑動窗口,將鄰域的像素按灰度級排序,取其中間值爲輸出像素。它的優點在於能夠在抑制隨機噪聲的同時不使邊緣模糊,但對於線,尖頂等細節多的圖像不宜採用中值濾波。
              A  =  imread('1.jpg');
             B = medfilt(A);                  %對圖像A進行中值濾波
             figure(1);
            imshow(B);
終於總結好了matlab的圖像運算,主要是點運算,代數運算,幾何運算和鄰域運算,這四種方法涵蓋了大部分數字圖像處理的常用的手段,是數字圖像處理的基礎內容,但是往往基礎的東西便是最重要的東西。~~





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章