gpt4 book ai didi

python - 获取图像内部特征并去除边界

转载 作者:太空狗 更新时间:2023-10-30 02:51:15 25 4
gpt4 key购买 nike

我想检测图像内部的特征(视网膜扫描)。该图像由黑色背景矩形框内的视网膜扫描组成。

我正在使用 Python 3.6,我正在使用 Canny Edge Detection检测图像内部的特征。我知道精明的边缘检测算法使用边缘梯度来寻找边缘。虽然 Canny 边缘检测为我提供了视网膜扫描内部的特征以正确选择阈值,但它始终保持视网膜扫描和输出图像中黑色背景之间的圆形边缘。

在输出图像中,我只想包含图像内部的特征(视网膜扫描),而不是外缘。我该怎么做?我正在寻找使用 Python 的解决方案。如果 Canny 边缘检测以外的技术有助于完成所需的任务,我也愿意使用它们。

下面是实际图像,以及我从 Canny 边缘检测得到的输出图像。

enter image description here

下面是我正在谈论的圆形边缘(以红色突出显示。)

enter image description here

下面是预期的输出图像:

enter image description here

我的代码如下:

import cv2
import matplotlib.pyplot as plt
from matplotlib.pyplot import imread as imread

plt.figure(1)
img_DR = cv2.imread('img.tif',0)
edges_DR = cv2.Canny(img_DR,20,40)

plt.subplot(121),plt.imshow(img_DR)
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges_DR,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])

plt.show()

您可以找到此代码中使用的图像 here .

提前致谢。

最佳答案

您可以通过 3 个步骤解决此问题:

1) 以非常低的强度对输入图像进行阈值处理,因此您的视网膜是唯一的前景区域。查看您的图像,这应该可以正常工作,因为您的前景区域没有真正的黑色区域:

img = cv2.imread('retina.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,bin = cv2.threshold(gray,5,255,cv2.THRESH_BINARY)

enter image description here

enter image description here

2) 使用侵 eclipse 从前景中移除一小部分边距,您希望在应用 canny 后移除外缘伪影形成的部分:

kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(bin,kernel,iterations = 1)

enter image description here

(以红色显示:侵 eclipse 区域)

3) 在您当前的结果图像上使用此腐 eclipse 图像作为二进制掩码。这将移除外边框,同时保持所有内部结构完好无损:

edges_DR = cv2.Canny(img,20,40)
result = cv2.bitwise_and(edges_DR,edges_DR,mask = erosion)

enter image description here

enter image description here

您可能必须尝试使用​​内核大小进行侵 eclipse 以移除完整边框但仅移除边框。但一般来说,这应该会产生非常好的和稳健的结果。即使扫描的方向或大小不一致。

关于python - 获取图像内部特征并去除边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56624430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com