用cv2进行医学图像分割

时间:2017-02-17 12:11:30

标签: python image opencv image-processing

我正在使用MIAS数据集的乳腺癌乳腺摄影图片。数据可在此处获得: http://peipa.essex.ac.uk/pix/mias/

例如,图像如下所示:

import cv2
import numpy as np

img = cv2.imread("mdb168.pgm",0)

import matplotlib.pyplot as plt

plt.imshow(img, cmap="gray")

enter image description here

我想删除图像中的所有工件和不必要的部分。

为此,我首先将图像二值化

ret,thresh1 = cv2.threshold(img,0,255,cv2.THRESH_BINARY)
plt.imshow(thresh1, cmap="gray")

enter image description here

使用开场

kernel = np.ones((20,20),np.uint8)
opening = cv2.morphologyEx(thresh1, cv2.MORPH_OPEN, kernel)
plt.imshow(opening, cmap="gray")

enter image description here

然后侵蚀

kernel = np.ones((120,120),np.uint8)
erosion = cv2.erode(opening,kernel,iterations = 1)
plt.imshow(erosion, cmap="gray")

enter image description here

然后将此蒙版与原始图像合并

merged = cv2.bitwise_and(img, img , mask=erosion)
plt.imshow(merged, cmap="gray")

enter image description here

我现在正试图去除左上区域的胸肌。 在此出版物中:https://www.ncbi.nlm.nih.gov/pubmed/26742491 他们使用完全相同的数据集并使用`种子区域增长'来实现这一点。 但是,没有提供代码,我在opencv中找不到。

我可以通过再次进行扩张/侵蚀等来获得类似的结果,但我正在寻找一种更通用的解决方案。 此外,其中一些图像没有显示肌肉,这也应该被检测到。

1 个答案:

答案 0 :(得分:0)

我会使用以下方法:

  1. (可选)我将通过重建< =>替换开口和侵蚀开口。侵蚀后接着大地测量的扩张。它将保留原始形状,然后您将保持更大的投资回报率。
  2. 卷积滤镜(高斯或简单平均)以平滑图像
  3. 大白帽,以便检测亮区。
  4. 然后将顶帽结果减去原始图像。