影像卷積 Convolution

2021-07-27 23:59:22 字數 1396 閱讀 7568

濾波(filtering)是影像處理的乙個基本操作,目的在選擇性的提取重要訊息,用在影像銳化、去除雜訊或提取感興趣的視覺特徵,這類處理需尋訪影像每個畫素,從此畫素和相鄰畫素得到新的畫素值。

核心(kernel):基本上核心是乙個固定大小,其中心為錨點(anchor point)的二維矩陣,以下為一高斯濾波的核心,大小和矩陣數值依需求而變。

卷積(convolution):是核心與圖的每個重疊畫素間的運算,目的是要計算影像中某個位置的結果,主要有以下4個步驟:

將核心的錨點放在輸入圖的某個畫素上。

各鄰近畫素乘上相對應的核心係數後加總。

將計算結果放在輸出圖的錨點畫素上。

對輸入圖的每個畫素重複進行以上動作。

我們用以上的核心和卷積的概念,對一張灰階8位元影像進行銳化,我們將輸出圖和來源圖的第一行、第一列、最後一行、最後一列不做處理,所以尋訪畫素時留了1畫素的寬度,使用ptr()函式讀取指定列的第乙個畫素,主要有3個步驟:

先複製圖案,讓不處理的第一行、第一列、最後一行、最後一列,輸出圖和輸入影象素值相同。

接著使用四個指標,前三個指標指向來源圖上中下列,第四個指向輸出圖目前處理的列數,之後逐列逐列進行濾波計算。

用saturate_cast將每次的計算結果限定在合理範圍,以本例來說就是從0到255,超過255會設定成255,小於0會設定成0。

opencv 限定合理範圍:template< … > _tp saturate_cast(_tp2 v)

影像卷積

#include #include using namespace cv;

void sharpen(const mat &src, mat &dst);

int main()

void sharpen(const mat &src, mat &dst)}}

掃瞄影像

opencv提供filter2d()函式方便濾波計算,我們依濾波值定義乙個核矩陣,之後呼叫filter2d函式時輸入此核矩陣當引數。

void filter2d(inputarray src, outputarray dst, int ddepth, inputarray kernel, point anchor=point(-1,-1), double delta=0, intbordertype=border_default)

上面的卷積函式可改寫成以下函式,兩者結果相同:

#include #include using namespace cv;

void sharpen2(const mat &src, mat &dst);

int main()

void sharpen2(const mat &src, mat &dst)

**:

各種卷積型別Convolution

從最開始的卷積層,發展至今,卷積已不再是當初的卷積,而是乙個研究方向。在反卷積這篇部落格中,介紹了一些常見的卷積的關係,本篇部落格就是要梳理這些有趣的卷積結構。閱讀本篇部落格之前,建議將這篇部落格結合在一起閱讀,想必會有更深的理解。另外,不管是什麼型別的卷積,我們都把它理解成一種運算操作。group...

膨脹卷積的缺點 卷積 反卷積與膨脹卷積

卷積 多 1 的對映 本質 在對輸入做9 1的對映關係時,保持了輸出相對於input中的位置性關係 對核矩陣做以下變形 卷積核的滑動步驟變成了卷積核矩陣的擴增 卷積的矩陣乘法變成以下形式 核矩陣重排,輸入featuremap變形為向量 反卷積 1 多 的對映 deconvlution transpo...

分析 影像分析

1.效果圖 2.發布服務 3.引入模組 查詢影像資料esri tasks imageserviceidentifytask 引數 esri tasks imageserviceidentifyparameters esri tasks imageserviceidentifyresult esri ...