【画像処理】1次微分フィルタ(横、縦)
自作で微分フィルタを作った。
#!/usr/env/bin python import cv2 import sys args = sys.argv def edge_filter(file): image = cv2.imread(file, cv2.IMREAD_GRAYSCALE) image = cv2.medianBlur(image, 3) (height, width) = image.shape[:2] edge_width = image.copy() edge_height = image.copy() for i in range(1, height-1): for j in range(1, width-1): left = image[i, j-1] / -2 right = image[i, j+1] / 2 top = image[i-1, j] / -2 bottom = image[i+1, j] / 2 edge_width[i, j] = abs(left + right) edge_height[i, j] = abs(top + bottom) cv2.imwrite('gray.png', image) cv2.imwrite('edge_width.png', edge_width) cv2.imwrite('edge_height.png', edge_height) if __name__ == '__main__': edge_filter(args[1])
フィルタは以下を適用した。
ただし、画像の端には適用していない。(コード上の、range(1, height-1) と range(1, width-1))
●横方向微分フィルタ
0 | 0 | 0 |
-1/2 | 0 | 1/2 |
0 | 0 | 0 |
●縦方向微分フィルタ
0 | -1/2 | 0 |
0 | 0 | 0 |
0 | 1/2 | 0 |
■元画像
■横方向微分画像
■縦方向微分画像
余計なエッジを消すために、メディアンフィルタを適用してから微分フィルタを適用する。
↓
★★比較