1. 程式人生 > >0023-影象處理中核運算元的概念

0023-影象處理中核運算元的概念

在影象處理的運算中,我們通常會用一個視窗矩陣(即下文和標題中提到的核運算元)去遍歷待處理的矩陣或影象,在遍歷的同時按一定的運演算法則把視窗內的數與矩陣或影象中的數作運算得到新值,並用這些新值去更新矩陣或影象。每次運算被更新的象素相對這個核算子的位置稱為錨點位置,在opencv中,若錨點座標為(-1,-1)則代表核算子最中間的點對應的原影象中的點值在運算後被更新。

核算子不同運算結果自然不一樣,也實現了不同的處理效果,比如各種濾波器就可以用不同的核運算元和運算規則來實現,下面這兩篇文章介紹了不同的濾波效果對應的核運算元,比如、高通濾波器(銳化濾波器)、邊緣濾波器、邊緣檢測核算子、浮雕濾波器、低通濾波器(均值模糊核算子)等,大家可以參考下,連結如下:
http://m.blog.csdn.net/zouxy09/article/details/49080029
http://www.cnblogs.com/slysky/archive/2011/11/25/2262899.html

在核運算元遍歷影象時,邊界值怎麼處理是一個問題,因為視窗覆蓋區域存在空值,在OpenCV中一般採用填充來處理這個問題,有幾種不同的填充方法,由相關函式中的borderType引數來設定填充方法,詳情如下:
在OpenCV的imgproc.hpp中定義了這個引數的可選擇值,如下
//! various border interpolation methods
enum { BORDER_REPLICATE=IPL_BORDER_REPLICATE, BORDER_CONSTANT=IPL_BORDER_CONSTANT,
       BORDER_REFLECT=IPL_BORDER_REFLECT, BORDER_WRAP=IPL_BORDER_WRAP, 
       BORDER_REFLECT_101=IPL_BORDER_REFLECT_101, BORDER_REFLECT101=BORDER_REFLECT_101,
       BORDER_TRANSPARENT=IPL_BORDER_TRANSPARENT,
       BORDER_DEFAULT=BORDER_REFLECT_101, BORDER_ISOLATED=16 };
作下精簡,實際上是下面這樣的


BORDER_REPLICATE  
BORDER_CONSTAN   
BORDER_REFLECT   
BORDER_WRAP      
BORDER_REFLECT_101 
BORDER_REFLECT101  
BORDER_TRANSPARENT 
這些引數的意義在OpenCV的filter.cpp中作了解釋如下
/*
Various border types, image boundaries are denoted with '|'

* BORDER_REPLICATE:     aaaaaa|abcdefgh|hhhhhhh
* BORDER_REFLECT:       fedcba|abcdefgh|hgfedcb
* BORDER_REFLECT_101:   gfedcb|abcdefgh|gfedcba
* BORDER_WRAP:          cdefgh|abcdefgh|abcdefg        
* BORDER_CONSTANT:      iiiiii|abcdefgh|iiiiiii  with some specified 'i'
*/
上面的解釋說得什麼意思?聽我慢慢道來!


各位朋友,如果你想知道“上面的解釋說得什麼意思?”請搜尋公眾號"qxsf321",關注後回覆0023即可獲取