图像处理,得到纯净的边缘

image processing, get pure edges

我是 python 编程的初学者,我想寻求一些提示。我有一个图表,我想通过该图表检测边缘然后进行过滤以仅获得干净的边缘。谁能帮助我如何编写 python 代码来完成图表的其余部分? 我使用 Sobel 滤波器进行边缘检测,但我不知道如何使用 neighborhood

来处理中值滤波器

pxq 条件为 p >> q 且 p << q。

这是我在 python 中的代码:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('original_image.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ddepth = -1

sobelX = cv2.Sobel(img, ddepth ,1, 0, ksize=3,borderType=cv2.BORDER_DEFAULT)

sobelY = cv2.Sobel(img, ddepth, 0, 1, ksize=3,borderType=cv2.BORDER_DEFAULT)

mag = np.hypot(sobelX, sobelY)

mag = mag / mag.max() * 255

mag = np.uint8(mag)

theta = np.arctan2(sobelY, sobelX)

angle = np.rad2deg(theta)

我不明白下一步:

应用邻域 pxq (p>>q) 和 (p<

谁能简单的给我解释一下?

我猜你的教授试图区分水平和垂直边缘,但没有解释得太清楚。

如果我从这张图片开始,忽略 Sobel 的东西,因为它已经是有效的边缘:

from skimage.filters.rank import median
import cv2

# Load image and greyscale it
im = cv2.imread('radial.png', cv2.IMREAD_GRAYSCALE)

# Define a 25x1 and a 1x25 footprint for the median function
footprintA = np.ones((1,25), np.uint8)
footprintB = footprintA.reshape(-1,1)

# Apply each to image
resA = median(im, footprintA)
resB = median(im, footprintB)


这里有一个显示脚印形状效果的小动画:


我使用了 scikit-image 因为我不知道你如何使用 OpenCV 制作 non-square 足迹.

我认为这意味着具有 non-square 内核的中值滤波器。在 OpenCV 中 docs is mentioned that kernel should be ksize × ksize (square), scipy realization 允许 non-square 滤波器形状 - 所以你可以使用它。 (正如马克提到的)

因此,如果您使用大小为 1x10 的过滤器,您将在水平方向上进行过滤。 如果过滤器形状为 10x1,则为垂直。

解释如下: