Bor*_*koP 6 python opencv image-segmentation
我有一个大脑的二进制图像。我只想将斑点留在中心,并消除这种圆形外观中的周围“噪音”。
这是一个示例图像:

我尝试使用 OpenCV 并获取计数,但失败了。我也根本不需要边界矩形框,我只想保留图像中的中心斑点,就像我提供的图像中那样,并去除周围的噪声/圆圈。这可能吗?
我假设,您想保留实际的大脑(“中心的斑点”)并摆脱头骨(“噪音圆形外观”)。
不幸的是,您没有显示任何代码,所以我不确定您在使用轮廓时失败的原因,但这是我的建议:
import cv2
import numpy as np
# Read input
img = cv2.imread('images/t6igVVk.png', cv2.IMREAD_GRAYSCALE)
# Generate intermediate image; use morphological closing to keep parts of the brain together
inter = cv2.morphologyEx(img, cv2.MORPH_CLOSE, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)))
# Find largest contour in intermediate image
cnts, _ = cv2.findContours(inter, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
cnt = max(cnts, key=cv2.contourArea)
# Output
out = np.zeros(img.shape, np.uint8)
cv2.drawContours(out, [cnt], -1, 255, cv2.FILLED)
out = cv2.bitwise_and(img, out)
cv2.imshow('img', img)
cv2.imshow('inter', inter)
cv2.imshow('out', out)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
最终输出out.png如下所示:
我对输入图像进行了一些形态学闭合 ( morphologyEx, getStructuringElement) 以将大脑的实际部分保持在一起。在那个中间图像上,我寻找最大的轮廓。在我的findContours通话中,我使用该RETR_EXTERNAL模式仅获取所有“外部轮廓”。这意味着,当稍后绘制此轮廓时,它也会在中间(即侧脑室)填充。所以,最后我只bitwise_and在两个图像上使用 a来解决这个问题。这也修复了中间图像中过大的部分。
希望有帮助!
| 归档时间: |
|
| 查看次数: |
1781 次 |
| 最近记录: |