我正在尝试通过 Open CV 中的 Blob 检测来识别脑肿瘤,但到目前为止,Open CV 只能检测脑 MRI 中的小圆圈,而从未检测到肿瘤本身。
这是代码:
import cv2
from cv2 import SimpleBlobDetector_create, SimpleBlobDetector_Params
import numpy as np
# Read image
def blobber(filename):
im = cv2.imread(filename, cv2.IMREAD_GRAYSCALE)
# Set up the detector with default parameters.
detector = cv2.SimpleBlobDetector_create()
params = cv2.SimpleBlobDetector_Params()
# Filter by Area.
params.filterByArea = True
params.minArea = 50
# Filter by Circularity
params.filterByCircularity = True
params.minCircularity = 0
# Filter by Convexity
params.filterByConvexity = True
params.minConvexity = 0.1
# Create a detector with the parameters
ver = (cv2.__version__).split('.')
if int(ver[0]) < 3 :
detector = cv2.SimpleBlobDetector(params)
else :
detector = cv2.SimpleBlobDetector_create(params)
# Detect blobs.
keypoints = detector.detect(im)
# Draw detected blobs as red circles.
# cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS ensures the size of the circle corresponds to the size of blob
im_with_keypoints = cv2.drawKeypoints(im,keypoints,np.array([]),(0,0,255),cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
# Show keypoints
cv2.imshow("Keypoints", im_with_keypoints)
cv2.waitKey(0)
这是当我向程序提供黑白对比大脑的图像时发生的情况(我对比了大脑,因此肿瘤会显示为黑色,而大脑的其余部分将大部分为白色):
无论如何,肿瘤不是一个完美的圆形,但它显然是大脑中最大的“ Blob ”。 Open CV 拿不出来,我怀疑是因为它的 shell 是黑色的,内核是白色的。
只有当我选择一个更容易区分的肿瘤,没有大的白色内核时,它才能把肿瘤捡起来。
有什么建议吗?我需要能够从原始图片中剥离这些 Blob (一旦它们准确工作),并使用它们的关键点从每个切片中的 2D 肿瘤重建大脑中的整个 3D 肿瘤。我离那一步有点远,但是这个 blob 检测器问题是 2D 和 3D 之间的关键链接。感谢所有帮助!
最佳答案
可能最大的 Blob 是头骨本身。
如果你分散最大的 Blob ,并保持下一件大事,请使用轮廓作为局外人