- Histogram Equalization
- Sobel Operator
Histogram Equalization
(圖片取自 Wikipedia) |
直方圖均化(Histogram Equalization),這種方法主要是將原本集中在某個區塊的機率函數(Probability Density Function),平均的分布在所有顏色上,藉此來增加圖像的全局對比度。
(直方圖) |
Equalize 的主要演算法如下:
def equalize(histogram): lut = [] for x in xrange(0, len(histogram), 256): step = reduce(operator.add, histogram[x:x + 256]) / 255 n = 0 for y in xrange(256): lut.append(n / step) n = n + histogram[y + x] return lut
Sobel Operator
在網路上 Survey 之後,發現索貝爾運算子(Sobel Operator)只是圖像處理中的運算子之一。其主要方法就是,算出影像的垂直梯度(gradient)與水平梯度兩者取絕對值相加即可。而該運算子的兩個加權函數(weighting function)是:
在知道加權函數後,我們得讓圖片的 pixel 與函數相乘
最後將其取絕對值相加
如此一來便能能夠得到結果,如下圖:
下面的程式碼是索貝爾運算子的部分核心代碼:
# sobel weighting function sobelX = [-1, 0, 1, -2, 0, 2, -1, 0, 1] sobelY = [-1, -2, -1, 0, 0, 0, 1, 2, 1] # 相乘、取絕對值 for x in xrange(1, height - 1): for y in xrange(1, width - 1): for k in xrange(3): for m in xrange(3): tempX[k * 3 + m] = imagePixel[y - 1 + m, x - 1 + k] * sobelX[k * 3 + m] tempY[k * 3 + m] = imagePixel[y - 1 + m, x - 1 + k] * sobelY[k * 3 + m] sharpPixel[y, x] = abs(sum(tempX)) + abs(sum(tempY))
Conclusion
這次作業完成後,原本想拿這支程式去對驗證碼進行前處理,看能不能有效的把雜訊去除,結果好像有點碰壁,希望之後了解更多後,能夠實作出來!
沒有留言:
張貼留言