數字圖像處理,圖像銳化算法的C++實現


http://blog.csdn.net/ebowtang/article/details/38961399

之前一段我們提到的算法都是和平滑有關, 經過平滑算法之后, 圖像銳度降低, 降低到一定程度, 就變成了模糊。 今天我們反其道行之, 我們看看銳化是怎么做的。 這里的銳化, 還是的從平滑談開去。我們先來觀察原來的圖像和平滑圖像的區別:

原圖 raw:

 raw

模糊圖 blur:

 blur

_________________________________________________________

源圖像減去模糊圖像等於 銳化后的邊緣mask效果:

 mask        

這個時候, 我們發現,減法做完的這個圖赫然勾勒出了原圖的邊緣!! 這樣給我們一個啟示就是, 如果我們把這個mask加到原圖上那豈不就是銳化了? (不明白? 銳化的意思就是邊緣的色差比較大, 產生的圖片貌似清晰的效果) 說干就干, 馬上我們來做個新的算式:

老圖 raw:

  raw

加上mask

  mask

_______________________________________________________

等於銳化圖  sharpen

  sharp

怎么樣, 是不是有了銳化的效果了??所以我們實際上的銳化效果就是從這么簡單的想法衍生出來的。 所以銳化的公式可以簡單的表述為 sharp = raw + ( raw-blur ); 再來看看我們原來的高斯模版的話就是這樣:

formula

這樣的話, 我們的銳化算法,也變得和之前的高斯平滑差不多了, 就是像素的加權平均值的計算就可以得到了。可以想見的事情是代碼肯定也會出奇的一致! 這是那個template改掉了:

 

[html]  view plain  copy
 
 print?
  1. void sharpenImage  (unsigned char* gray, unsigned char* smooth, int width, int height)    
  2. {    
  3.         
  4.     int templates[25] = { -1, -4, -7, -4, -1,     
  5.         -4, -16, -26, -16, -4,     
  6.         -7, -26, 505, -26, -7,    
  7.         -4, -16, -26, -16, -4,     
  8.         -1, -4, -7, -4, -1 };           
  9.     memcpy ( smooth, gray, width*height*sizeof(unsigned char) );    
  10.     for (int j=2;j<height-2;j++)    
  11.     {    
  12.         for (int i=2;i<width-2;i++)    
  13.         {    
  14.             int sum = 0;    
  15.             int index = 0;    
  16.             for ( int m=j-2; m<j+3; m++)    
  17.             {    
  18.                 for (int n=i-2; n<i+3; n++)    
  19.                 {    
  20.                     sum += gray [ m*width + n] * templates[index++] ;    
  21.                 }    
  22.             }    
  23.             sum /= 273;    
  24.             if (sum > 255)    
  25.                 sum = 255;    
  26.             if (sum <0)    
  27.                 sum = 0;    
  28.             smooth [ j*width+i ] = sum;    
  29.         }    
  30.     }    
  31. }    

當然, 這個銳化算法或者說銳化的模板只是我根據前面的算式自己計算的來的,其實還是有非常主流的銳化模版可以供使用的, 比如說著名的拉普拉斯算子。

 

 

參考資源:

【1】http://blog.csdn.NET/hhygcy/article/details/4330939


免責聲明!

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



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