opencv进行图片边缘提取(roberts)
roberts算法是图像边缘提取的基础算法,下边的代码是该算法的实现,能够对一张图片进行边缘提取。
# roberts边缘提取算法
#各类提取算法大同小异:sobel可控制核的大小,对于n阶,设置窗口大小为n+1,涉及平滑算子(二项展开式的系数,即n的组合数)
#差分算子,由平滑算子n-2组合数补零从后向前差分而得
#n=5阶,平滑算子14641,差分算子013310差分得,120-2-1。
import numpy as np
import cv2
import math
import sys
from scipy import signal
def roberts(I, _boundry='full', _fillvalue=0):
# 图像的高、宽
H1, W1 = I.shape[0:2]
# 卷积核的尺寸
H2, W2 = 2, 2
# 卷积核1及锚点位置
R1 = np.array([[1, 0], [0, -1]], np.float32)
kr1, kc1 = 0, 0
# 计算full卷积
IconR1 = signal.convolve2d(I, R1, mode='full', boundary=_boundry, fillvalue=_fillvalue)
IconR1 = IconR1[H2 - kr1 - 1:H1 + H2 - kr1 - 1, W2 - kc1 - 1:W1 + W2 - kc1 - 1]
# 卷积核2
R2 = np.array([[0, 1], [-1, 0]], np.float32)
# 锚点的位置
kr2, kc2 = 0,