halcon圖像濾波(一)halcon實現sobel處理

首先在網上搜索了什麼是sobel:

一、先是理解一下什麼是卷積

最容易理解的對卷積(convolution)的解釋



文字來解釋就是:卷積的其中一方參與者是衝擊響應,它所描述的的曲線方向與時間流逝一致。而卷積的輸出等於以前的信號效果累加,這個累加必然從當前時間點逆時間流逝方向進行的。很顯然,離當前時間越近,那個輸入殘留在系統中的迴響就越大。

轉自知乎 

再說說自己對卷積公式的理解,也是每次自己容易困惑的地方:注意公式中的n纔是自變量(意義便是n時刻的系統響應),t只是用於積分的,f(n-t)是n時刻時往回倒t單位時間時,也就是(n-t)時刻的信號輸入,而h(t)則是f()這個信號對於時間的變化,所以將n時刻前的每個時間的信號輸入與其對應的對於時間變化的響應相乘(結合上面圖片理解),把這些結果疊加起來就是n時刻獲得的響應。

二、然後是對圖像處理中的卷積,涉及到一些矩陣的東西

ps:雖然上面對卷積的理解解開了以前一直以來對卷積的困惑,不過在看圖像處理中的卷積時感覺好像不一樣。。。


關於下面這個文章:

徹底理解數字圖像處理中的卷積-以Sobel算子爲例

這篇文章前面的概念部分講得很詳細,對幾個名詞解釋也通俗易懂(感覺就是矩陣元素的對應相乘),只是沒說sobel算子的gx和gy的具體用法,所以還是不知道這個算法的意義和用處。。。

好在下面這篇文章對sobel的用法和用處有一定的解紹,讓我大致理解了sobel的概念

https://www.cnblogs.com/sophia-hxw/p/6088035.html 

也大概知道gx和gy對於結果的差別,舉個例子:比如原圖是一個方框,用gx計算了垂直梯度後,由於只反映縱向的梯度差異,結果顯示出來就只有原來的兩條水平的邊,相反,如果是用gy計算了水平梯度,由於只反映橫向的梯度差,原來的兩條垂直邊就被反映出來,而水平邊因爲水平方向上的梯度值都一樣就顯示不出梯度差。


三、使用halcon中的sobel_amp函數及一系列操作完成圖像邊緣檢測

參考如下鏈接

Halcon學習(八)邊緣檢測(一)

不禁感慨,halcon真是簡單粗暴啊

關於sobel_amp(Image : EdgeAmplitude : FilterType, Size : )這個函數

read_image (Image, 'fabrik')

sobel_amp (Image, EdgeAmplitude, 'y', 3)
sobel_amp (Image, EdgeAmplitude, 'x', 3)
sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)
sobel_amp (Image, EdgeAmplitude, 'sum_sqrt', 3)
sobel_amp (Image, EdgeAmplitude, 'sum_sqrt_binomial', 3)
sobel_amp (Image, EdgeAmplitude, 'x_binomial', 3)
sobel_amp (Image, EdgeAmplitude, 'y_binomial', 3)
sobel_amp (Image, EdgeAmplitude, 'sum_abs_binomial', 3)
*sobel_amp (Image, EdgeAmplitude, '', 3)
*sobel_amp (Image, EdgeAmplitude, '', 3)

dev_display (EdgeAmplitude)

試了各種FilterType參數,有不同的效果,具體的用處還不知道。

read_image (Image, 'fabrik')


sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)
sobel_amp (Image, EdgeAmplitude, 'sum_abs', 5)
sobel_amp (Image, EdgeAmplitude, 'sum_abs', 7)
sobel_amp (Image, EdgeAmplitude, 'sum_abs', 9)
sobel_amp (Image, EdgeAmplitude, 'sum_abs', 11)

dev_display (EdgeAmplitude)

然後是size參數,效果應該是值越大,篩選的線越粗,很多細節就被忽略了,值越小就能體現更多細節,具體用法應該是根據實際情況。根據FilterType選擇的不同,size的值的可選數值也不同,可以參考halcon裏的函數解釋。









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章