Python实现数字图像处理染色体计数示例

 更新时间:2022年06月07日 12:19:02   作者:悲恋花丶无心之人  
这篇文章主要为大家介绍了Python实现数字图像处理染色体计数示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

一、实验内容 

对于下面这幅图像,编程实现染色体计数,并附简要处理流程说明。

二、实验步骤

1.中值滤波

2.图像二值化

3.膨胀图像

4.腐蚀图像

5.计算光影背景

6.移除背景

7.检测染色体

三、代码

import cv2
import numpy as np
# 计算光影背景
def calculateLightPattern(img4):
    h, w = img4.shape[0], img4.shape[1]
    img5 = cv2.blur(img4, (int(w/3), int(w/3)))
    return img5
# 移除背景
def removeLight(img4, img5, method):
    if method == 1:
        img4_32 = np.float32(img4)
        img5_32 = np.float32(img5)
        ratio = img4_32 / img5_32
        ratio[ratio > 1] = 1
        aux = 1 - ratio
        # 按比例转换为8bit格式
        aux = aux * 255
        aux = np.uint8(aux)
    else:
        aux = img5 - img4
    return aux
def ConnectedComponents(aux):
    num_objects, labels = cv2.connectedComponents(aux)
    if num_objects < 2:
        print("connectedComponents未检测到染色体")
        return
    else:
        print("connectedComponents检测到染色体数量为:", num_objects - 1)
    output = np.zeros((aux.shape[0], aux.shape[1], 3), np.uint8)
    for i in range(1, num_objects):
        mask = labels == i
        output[:, :, 0][mask] = np.random.randint(0, 255)
        output[:, :, 1][mask] = np.random.randint(0, 255)
        output[:, :, 2][mask] = np.random.randint(0, 255)
    return output
def ConnectedComponentsStats(aux):
    num_objects, labels, status, centroids = cv2.connectedComponentsWithStats(aux)
    if num_objects < 2:
        print("connectedComponentsWithStats未检测到染色体")
        return
    else:
        print("connectedComponentsWithStats检测到染色体数量为:", num_objects - 1)
    output = np.zeros((aux.shape[0], aux.shape[1], 3), np.uint8)
    for i in range(1, num_objects):
        mask = labels == i
        output[:, :, 0][mask] = np.random.randint(0, 255)
        output[:, :, 1][mask] = np.random.randint(0, 255)
        output[:, :, 2][mask] = np.random.randint(0, 255)
    return output
def FindContours(aux):
    contours, hierarchy = cv2.findContours(aux, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    if len(contours) == 0:
        print("findContours未检测到染色体")
        return
    else:
        print("findContours检测到染色体数量为:", len(contours))
    output = np.zeros((aux.shape[0], aux.shape[1], 3), np.uint8)
    for i in range(len(contours)):
        cv2.drawContours(
            output,
            contours,
            i,
            (np.random.randint(0, 255),
             np.random.randint(0, 255),
             np.random.randint(0, 255)), 2)
    return output
# 读取图片
img = cv2.imread('img.png', 0)
pre_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 二值化函数
# 第一步:中值滤波
# 中值滤波
img1 = cv2.medianBlur(img, 3)
# 显示并保存图片
cv2.imshow('gray', img)
cv2.imshow('medianBlur', img1)
cv2.imwrite('medianBlur.jpg', img1)
# 第二步:图像二值化
# 图像二值化
ret, img2 = cv2.threshold(img1, 140, 255, 0, img1)  # 二值化函数
# 显示并保存图片
cv2.imshow('threshold', img2)
cv2.imwrite('threshold.jpg', img2)
# 第三步:膨胀图像
dilate_kernel = np.ones((3, 3), np.uint8)
img3 = cv2.dilate(img2, dilate_kernel)
# 显示并保存图片
cv2.imshow('dilate', img3)
cv2.imwrite('dilate.jpg', img3)
# 第四步:腐蚀图像
erode_kernel = np.ones((7, 7), np.uint8)
img4 = cv2.erode(img3, erode_kernel)
# 显示并保存图片
cv2.imshow('erode', img4)
cv2.imwrite('erode.jpg', img4)
# 第五步:计算光影背景
img5 = calculateLightPattern(img4)
# 显示并保存图片
cv2.imshow('LightPattern', img5)
cv2.imwrite('LightPattern.jpg', img5)
# 第六步:移除背景
aux = removeLight(img4, img5, 1)
# 显示并保存图片
cv2.imshow('removeLight', aux)
cv2.imwrite('removeLight.jpg', aux)
# 第七步:检测轮廓
output1 = ConnectedComponents(aux)
output2 = ConnectedComponentsStats(aux)
output3 = FindContours(aux)
# 显示并保存图片
cv2.imshow('connectedComponents', output1)
cv2.imwrite('connectedComponents.jpg', output1)
cv2.imshow('connectedComponentsWithStats', output2)
cv2.imwrite('connectedComponentsWithStats.jpg', output2)
cv2.imshow('findContours', output3)
cv2.imwrite('findContours.jpg', output3)
cv2.waitKey(0)

四、结果

1.中值滤波

2.图像二值化

3.膨胀图像

4.腐蚀图像

5.计算光影背景

6.移除背景

7.检测染色体

(1)connectedComponents.jpg

(2)connectedComponentsWithStats.jpg

(3)findContours.jpg

染色体个数为46

以上就是Python实现数字图像处理染色体计数示例的详细内容,更多关于Python数字图像处理染色体计数的资料请关注脚本之家其它相关文章!

相关文章

  • Tensorflow环境搭建的方法步骤

    Tensorflow环境搭建的方法步骤

    本篇文章主要介绍了Tensorflow环境搭建的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Python中使用ipython的详细教程

    Python中使用ipython的详细教程

    ipython是一个非常流行的python解释器,比python解释器好用很多,本文重点给大家介绍Python中使用ipython的详细教程,需要的朋友参考下吧
    2021-06-06
  • python使用os模块的os.walk遍历文件夹示例

    python使用os模块的os.walk遍历文件夹示例

    python使用os模块的os.walk遍历文件夹示例
    2014-01-01
  • python神经网络MobileNetV2模型的复现详解

    python神经网络MobileNetV2模型的复现详解

    这篇文章主要为大家介绍了python神经网络MobileNetV2模型的复现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Pytorch Tensor 输出为txt和mat格式方式

    Pytorch Tensor 输出为txt和mat格式方式

    今天小编就为大家分享一篇Pytorch Tensor 输出为txt和mat格式方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • pyinstaller执行报错的问题解决

    pyinstaller执行报错的问题解决

    有时候,PyInstaller可能无法正确识别和打包所有的依赖项,导致名称错误,本文主要介绍了pyinstaller执行报错的解决方案,感兴趣的可以了解一下
    2023-11-11
  • Python nonlocal关键字 与 global 关键字解析

    Python nonlocal关键字 与 global 关键字解析

    这篇文章主要介绍了Python nonlocal关键字 与 global 关键字解析,nonlocal关键字用来在函数或其他作用域中使用外层变量,global关键字用来在函数或其他局部作用域中使用全局变量,更多香瓜内容需要的小伙伴可以参考一下
    2022-03-03
  • python之pygame模块实现飞机大战完整代码

    python之pygame模块实现飞机大战完整代码

    这篇文章主要为大家详细介绍了python之pygame模块实现飞机大战完整代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • 基于Python log 的正确打开方式

    基于Python log 的正确打开方式

    下面小编就为大家分享一篇基于Python log 的正确打开方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python解析树及树的遍历

    Python解析树及树的遍历

    本篇是给大家介绍的Python实现解析树以及实现二叉树的三种遍历,先序遍历,中序遍历,后序遍历的例子,非常的详细,有需要的小伙伴可以参考下。
    2016-02-02

最新评论