【數字圖像處理】圖像的平滑處理


 

圖像平滑的目的

  • 模糊:在提取較大目標前,去除太小細節,或將目標內的小間斷連接起來。
  • 消除噪聲:改善圖像質量,降低干擾。

平滑處濾波對圖像的低頻分量增強,同時削弱高頻分量,用於消除圖像中的隨機噪聲,起到平滑作用。

 

圖像平滑處理的基本方法

  • 領域平均法
  • 領域加權平均法
  • 選擇式掩模法
  • 中值濾波

 

領域平均法

模板在圖像上移動,模板的中心對應目標像素點,在模板范圍內對目標像素點進行卷積運算(對應系數乘對應像素點),然后相加除上模板大小得到均值,這個均值就是目標像素點處理后的值。

 

 如圖,對5行四列的圖像進行3*3模板的鄰域平均法處理:

 

 

鄰域平均法存在的問題

抑制了高頻成分,使用圖像變得模糊,平滑效果不好,減少噪音的同時,損失了高頻信息。
注意:模板不宜過大,因為模板越大對速度有直接影響,且模板大小越大變換后圖像越模糊,特別是在邊緣和細節處

優點:算法簡答,計算速度快。
缺點:造成圖像一定程度上的模糊。

 

3*3模板鄰域平均法示例:

Use_ROWS:行

Use_Line:列

圖像邊界不處理:只處理1-----n-1。

             int count = 0;                   
                     for(int i = 1; i < Use_ROWS-1; i++)   
                    {                  
                        for(int j = 1; j < Use_Line-1; j++)
                        {               
                          //鄰域平均法
                          count=0;
                          count = Image_Use[i][j]+Image_Use[i][j-1]+Image_Use[i][j+1]+Image_Use[i-1][j]+Image_Use[i-1][j-1]+Image_Use[i-1][j+1]+Image_Use[i+1][j]+Image_Use[i+1][j-1]+Image_Use[i+1][j+1];
                          Image_Use[i][j] = (int)(count/9);
                        }
                    }

 

鄰域加權平均法

加權:系數不再全部為1。

 

 

 

 

 

選擇式掩模法

 

 

 

 

 

 

中值濾波

中值濾波器,使用濾波器窗口包含區域的像素值的中值來得到窗口中心的像素值,本質上是一種非線性平滑濾波器。

中值濾波:抑制噪聲又可以盡量保持圖像細節,對濾除脈沖干擾及圖像掃描噪聲最為有效。不

注意:對一些細節多,特別是點,線,尖頂細節多的圖像不宜采用中值濾波。

不同的窗口選擇

常用窗口

 

 復合型中值濾波介紹

 

 

3*3模板的中值濾波處理

int cmp(const void *a,const void *b)
{
    return *(int *)a-*(int *)b;//這是從小到大排序,若是從大到小改成: return *(int *)b-*(int *)a;
}

 

          int temp[9],index=0;                   
                     for(int i = 1; i < Use_ROWS-1; i++)   
                    {   
                        for(int j = 1; j < Use_Line-1; j++)
                        { 
                          //中值濾波
                          memset(temp, 0, sizeof(temp));
                          temp[index]=Image_Use[i][j];
                          temp[index+1]=Image_Use[i-1][j];
                          temp[index+2]=Image_Use[i-1][j-1];
                          temp[index+3]=Image_Use[i-1][j+1];
                          temp[index+4]=Image_Use[i][j-1];
                          temp[index+5]=Image_Use[i][j+1];
                          temp[index+6]=Image_Use[i+1][j];
                          temp[index+7]=Image_Use[i+1][j-1];
                          temp[index+8]=Image_Use[i+1][j+1];
                          qsort(temp,9,sizeof(temp[0]),cmp);//(數組,需要排序的數字個數,單個數字所占內存大小,比較函數)
                          Image_Use[i][j] = temp[4];

                        }
                    }

 

          

 


免責聲明!

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



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