图像分割以在生物图像中找到细胞

时间:2019-05-05 16:56:45

标签: python image-processing image-segmentation cv2 hough-transform

我有一堆细胞的图像,我想提取细胞的位置。我目前正在使用圆形Hough变换,它可以正常运行,但是会经常损坏。想知道人们是否有任何指示。抱歉,这不是专门针对软件的问题,而是如何在图像分割问题中获得更好的性能。

我在skimage中尝试了其他方法,但效果有限,例如轮廓发现,边缘检测和活动轮廓。开箱即用没有什么效果,尽管可能只是我没有正确调整参数。我没有做太多的图像分割,而且我真的不知道这些东西是如何工作的,或者评审它的最佳方法是什么。

这是我当前正在使用的代码,它将灰度图像作为一个numpy数组,并将该单元格查找为一个圆形:

import cv2
import numpy as np
smallest_dim = min(img.shape)
min_rad = int(img.shape[0]*0.05)
max_rad = int(img.shape[0]*0.5) #0.5
circles = cv2.HoughCircles((img*255).astype(np.uint8),cv2.HOUGH_GRADIENT,1,50,
    param1=50,param2=30,minRadius=min_rad,maxRadius=max_rad)
circles = np.uint16(np.around(circles))
x, y, r = circles[0,:][:1][0]

这里是一个示例,其中代码找到了错误的圆圈作为单元格的边界。似乎被牢房周围的垃圾弄糊涂了: Failed Hough Transform

1 个答案:

答案 0 :(得分:2)

我认为一个问题可能是绘制圆(坐标可能是错误的)。

此外,就像@Nicos提到的那样,对传统图像处理进行了大量调整,以使特定情况起作用(而在最近的机器学习方法中,调整是为了使模型不会过度训练),我尝试使用skimage在下面显示。半径范围,圆数,边缘检测图像,所有这些都需要调整...鉴于图像之间和内部的潜在变化。在此图像中,至少对我而言,$get_row_in_book=$this->get_data('books')->books_much; $data=array( for ($i=0;$i<$get_row_in_book;$i++){ 'moon'=>$i } ); $this->db->insert('mytable', $data); 边缘检测图像中有3个变化梯度的圆,您可以看到我们得到了3个以上的圆,此外,“照明”似乎在不同的位置有所不同(因为这是一张sem图片)?!

canny
import matplotlib.pyplot as plt
import numpy as np
import imageio

from skimage import data, color
from skimage.transform import hough_circle, hough_circle_peaks
from skimage.feature import canny
from skimage.draw import circle_perimeter
from skimage.util import img_as_ubyte
!wget https://i.stack.imgur.com/2tsWw.jpg

enter image description here

# rgb to gray https://stackoverflow.com/a/51571053/868736
im = imageio.imread('2tsWw.jpg')
gray = lambda rgb : np.dot(rgb[... , :3] , [0.299 , 0.587, 0.114]) 
gray = gray(im)  
image = np.array(gray[60:220,210:450])
plt.imshow(image,cmap='gray')

enter image description here

edges = canny(image, sigma=3,)
plt.imshow(edges,cmap='gray')

enter image description here