资源简介
python和matlab两个版本,本代码采用圆度检测的方法,筛选粘连细胞,并对粘连细胞进行分割。
代码片段和文件信息
# -*- coding: utf-8 -*-
import cv2
import matplotlib.pyplot as plt
import numpy as np
import scipy
from matplotlib.patches import Circle
from PIL import Image
from skimage import filters
from skimage.measure import label regionprops
from skimage.morphology import closing dilation disk opening square
plt.close(‘all‘)
#%%
filename = ‘3.jpg‘
img_raw = Image.open(filename)
img_raw = img_raw.resize((14401080))
img_rgb = np.array(img_raw dtype=np.float32) / 255.0
img_rgb = img_rgb[: :1080 :]
h w = img_rgb.shape[0:2]
plt.figure()
plt.imshow(img_rgb)
plt.title(‘Original Image‘)
plt.axis(‘off‘)
#%% 提取ROI
img_hsv = cv2.cvtColor(img_rgb cv2.COLOR_BGR2HSV)
img_gray = img_hsv[... 2]
mask = img_gray > 0.5
img_mask = img_rgb * np.dstack((mask mask mask))
stats = regionprops(label(mask))
bbox = stats[0].bbox
roi_1 = img_mask[bbox[0]:+bbox[2] bbox[1]:bbox[3] :]
plt.figure()
plt.imshow(roi_1)
plt.title(‘Circle ROI‘)
plt.axis(‘off‘)
b_h = int((bbox[2] - bbox[0]) * (1 - np.sqrt(2) / 2) / 2)
b_w = int((bbox[3] - bbox[1]) * (1 - np.sqrt(2) / 2) / 2)
roi_2 = roi_1[b_h:-b_h b_w:-b_w :]
plt.figure()
plt.imshow(roi_2)
plt.title(‘Rectangle ROI‘)
plt.axis(‘off‘)
#%% 二值化
roi_gray = cv2.cvtColor(roi_2 cv2.COLOR_BGR2GRAY)
plt.figure()
plt.imshow(roi_gray cmap=‘gray‘)
plt.title(‘Gray Color‘)
plt.axis(‘off‘)
threshold = filters.threshold_otsu(roi_gray)
roi_bin = (roi_gray < threshold) * 1.0 # 二值化
plt.figure()
plt.imshow(roi_bin cmap=‘gray‘)
plt.title(‘Binary Reuslt‘)
plt.axis(‘off‘)
#%% 形态操作
roi_pad = np.pad(roi_bin (1 1) ‘constant‘ constant_values=1)
for i in range(roi_pad.shape[0]):
if np.sum(roi_pad[i 1:20]) == 0:
roi_pad[i 0] = 0
break
roi_fill = scipy.ndimage.binary_fill_holes(roi_pad)
roi_fill = roi_fill[1:-1 1:-1]
plt.figure()
plt.imshow(roi_fill cmap=‘gray‘)
plt.title(‘Fill Holes Reuslt‘)
plt.axis(‘off‘)
roi_open = opening(roi_fill square(6))
plt.figure()
plt.imshow(roi_open cmap=‘gray‘)
plt.title(‘Image Opening Reuslt‘)
plt.axis(‘off‘)
#%% 细胞计数
plt.figure()
plt.imshow(roi_2)
plt.title(‘Detect Reuslt‘)
plt.axis(‘off‘)
ax = plt.gca()
stats = regionprops(label(roi_open neighbors=4) coordinates=‘xy‘)
areas = np.zeros((len(stats) 1))
centers = np.zeros((len(stats) 2))
radius = np.zeros((len(stats) 1))
for i in range(len(stats)):
centers[i :] = stats[i].centroid
areas[i] = stats[i].area
radius[i] = (stats[i].major_axis_length + stats[i].minor_axis_length) / 4.0
patch = Circle((centers[i 1] centers[i 0]) radius[i] * 1.2 color=‘red‘ fill=False)
ax.add_patch(patch)
cell_num = len(stats)
area_mean = np.mean(areas)
area_std = np.std(areas)
radius_mean = np.mean(radius)
print(‘细胞个数:{:d}‘.format(cell_num))
print(‘细胞平均面积,{:.2f}‘.format(area_mean))
print(‘细胞平均半径,{:.2f}‘.format(radius_mean))
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-03-31 15:47 粘连细胞分割\
文件 112255 2019-03-26 17:12 粘连细胞分割\1.jpg
文件 139436 2019-03-26 17:12 粘连细胞分割\2.jpg
文件 121746 2019-03-26 17:12 粘连细胞分割\3.jpg
目录 0 2019-03-31 15:40 粘连细胞分割\__pycache__\
文件 1420 2019-03-31 15:40 粘连细胞分割\__pycache__\utils.cpython-35.pyc
文件 2966 2019-03-31 10:39 粘连细胞分割\main.py
文件 4121 2019-03-31 15:45 粘连细胞分割\main2.py
文件 1068 2019-03-31 15:40 粘连细胞分割\utils.py
文件 106 2019-03-31 15:47 粘连细胞分割\参考资料.txt
目录 0 2019-03-29 20:50 粘连细胞分割\新图\
文件 112255 2019-03-26 17:12 粘连细胞分割\新图\QQ图片20190326171300.jpg
文件 139436 2019-03-26 17:12 粘连细胞分割\新图\QQ图片20190326171312.jpg
文件 121746 2019-03-26 17:12 粘连细胞分割\新图\QQ图片20190326171318.jpg
文件 41250 2019-03-26 17:12 粘连细胞分割\新图\QQ图片20190326171334.jpg
文件 42521 2019-03-26 17:12 粘连细胞分割\新图\QQ图片20190326171342.jpg
文件 1327158 2018-06-11 10:00 粘连细胞分割\新图\blood.bmp
文件 22847 2019-03-25 21:54 粘连细胞分割\新图\h1.jpg
文件 135594 2019-03-25 21:55 粘连细胞分割\新图\h2.jpg
文件 141080 2019-03-25 21:56 粘连细胞分割\新图\h4.jpg
文件 25833 2019-03-25 21:11 粘连细胞分割\新图\th1.jpg
文件 32238 2019-03-25 21:40 粘连细胞分割\新图\timg.jpg
文件 3323191 2019-03-26 20:55 粘连细胞分割\红细胞识别系统的设计与实现.pdf
评论
共有 条评论