Javascript影像處理:平滑處理

來源:互聯網
上載者:User

前言

上一篇文章,我們講解了映像的虛擬邊緣,這篇文章開始進行平滑(也就是模糊)處理。

基本原理

這裡直接引用OpenCV 2.4+ C++ 平滑處理和OpenCV 2.4+ C++ 邊緣梯度計算的相關內容:

平滑也稱模糊, 是 一項簡單且使用頻率很高的影像處理方法。

平滑處理時需要用到一個濾波器。 最常用的濾波器是線性濾波器,線性 濾波處理的輸出像素值(例如:g(i,j))是輸入像素值(例如:f(i+k,j+l))的加權平均:

g(i,j) = sum_{k,l} f (i+k, j+l) h(k,l)

h(k,l)稱為核, 它僅僅是一個加權係數。

這裡涉及一種叫做“卷積”的運算,那麼卷積 是什麼呢?

卷積是在每一個映像塊與某個運算元(核)之間進行的運算。

核?!

核就是一個固定大小 的數值數組。該數組帶有一個錨點 ,一般位於數組中央。

kernel example

可是這怎麼運算啊?

假 如你想得到映像的某個特定位置的卷積值,可用下列方法計算:

將核的錨點放在該特定位置的像素上,同時,核內 的其他值與該像素鄰域的各像素重合;

將核內各值與相應像素值相乘,並將乘積相加;

將所得結果放到與錨點對應的 像素上;

對映像所有像素重複上述過程。

用公式表示上述過程如下:

H(x,y) = sum_{i=0}^{M_{i} - 1} sum_{j=0}^{M_{j}-1} I(x+i - a_{i}, y + j - a_{j})K(i,j)

在映像邊緣的卷積怎麼辦呢?

計算卷積前, 需要通過複製源映像的邊界建立虛擬像素,這樣邊緣的地方也有足夠像素計算卷積了。這就是為什麼上一篇文章需要做虛擬 邊緣函數。

均值平滑

均值平滑實際上就是核心元素全是1的卷積運算,然後再除以核心的大小,用數學表達 式來表示就是:

texttt{K} = frac{1}{texttt{ksize.width*ksize.height}} begin{bmatrix} 1 & 1 & 1 & cdots & 1 & 1 1 & 1 & 1 & cdots & 1 & 1 hdotsfor{6} 1 & 1 & 1 & cdots & 1 & 1 end{bmatrix}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.