数字图像处理 - 形态学算法 - 颗粒划分 - 冈萨雷斯第三版 - 9.36

这篇具有很好参考价值的文章主要介绍了数字图像处理 - 形态学算法 - 颗粒划分 - 冈萨雷斯第三版 - 9.36。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MorphologicalAlgorithm_ParticleSegmentation

形态学算法 - 颗粒分割

项目地址:https://github.com/LetMeFly666/MorphologicalAlgorithm_ParticleSegmentation

在线文档: https://maps.letmefly.xyz

问题描述

显微应用中一个预处理步骤是从两组或更多组重叠的类似颗粒(见右图)中分离出单个独立的一种颗粒。假设所有颗粒的大小相同,提出一种产生3幅图像的形态学算法,这3幅图像分别仅由如下物体组成:

  • (a) 仅与图像边界融合在一起的颗粒
  • (b) 仅彼此重叠的颗粒
  • © 没有重叠的颗粒

数字图像处理 - 形态学算法 - 颗粒划分 - 冈萨雷斯第三版 - 9.36

不带水印图片可在 我的Github下载

具体方法:

拿到图像后,首先进行二值化处理,然后进行一个开运算。

本项目用Python实现。到此为止,图像(numpy.array)中的数据只有0和255

由此我们可以使用opencv中自带的连通块划分函数,将不同的颗粒(块)划分为不同的连通块(记为“标签图片”)。

比如:

0000000000
0011000200
0010022203
0000022003
0000000000
  • 0是黑色的区域
  • 1是一个白色的颗粒(面积比较小,只有3,因此应该只有单个颗粒)
  • 2是一个白色的颗粒块(面积比较大,有6,因此推测有多个颗粒重叠到了一起)

然后,我们就可以根据划分出来的连通块,来区分不同类型的颗粒了。

与边界重合的颗粒

我们只需要遍历一下4个边界。如果一个颗粒与边界重合(边界上出现了不为0的标签),那么我们就记录下这个颗粒的标签。

例如上面小图的3。

之后遍历一遍图像,并新建一个全为0的大小相同的图像(记为“边界图像”),找到标签图片中是“3”的位置,把边界图像中对应位置记为255。

这样,我们就提取出了边界颗粒

相互重叠的颗粒

提取出了边界颗粒后,我们用开运算后的图像减去边界图像,只研究未分类的剩余颗粒。

假设一个颗粒的面积大约为3,那么我们只需要统计每个种类的标签的像素个数,>3的就视为是有重叠的颗粒

单个的颗粒

提取出了相互重叠的颗粒后,只需要拿剩余颗粒减去有重叠的颗粒,就能得到单独的颗粒

代码实现

'''
Author: LetMeFly
Date: 2022-06-12 23:28:36
LastEditors: LetMeFly
LastEditTime: 2022-06-13 15:01:56
'''
import matplotlib.pyplot as plt
import numpy as np
import os
import cv2

# 避免plt警告
os.environ["QT_DEVICE_PIXEL_RATIO"] = "0"
os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
os.environ["QT_SCREEN_SCALE_FACTORS"] = "1"
os.environ["QT_SCALE_FACTOR"] = "1"

# 支持中文显示
plt.rcParams[ 'font.sans-serif' ] = [ 'SimHei' ]

# 读入图像
img = cv2.imread("img/9.36.jpg", 0)
rows, cols = img.shape

# 二值化
_, img_binary = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
img_open = cv2.morphologyEx(img_binary, cv2.MORPH_OPEN, kernel=cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)))  # 开运算
img_open_backup = img_open.copy()

# 把图像分成一个个连通块儿
num, img_label = cv2.connectedComponents(img_open)
labels = [i for i in range(1, num)]

bounded_labels = set()  # 处在边界的标签
for col in range(cols):
    if img_label[0][col]:
        bounded_labels.add(img_label[0][col])
    if img_label[rows - 1][col]:
        bounded_labels.add(img_label[rows - 1][col])
for row in range(rows):
    if img_label[row][0]:
        bounded_labels.add(img_label[row][0])
    if img_label[row][cols - 1]:
        bounded_labels.add(img_label[row][cols - 1])

# 与边界重合的部分
img_bounds = np.zeros((rows, cols), dtype=np.uint8)
for row in range(rows):
    for col in range(cols):
        if img_label[row][col] in bounded_labels:
            img_bounds[row][col] = 255
img_open -= img_bounds

# 获取各个标签的面积
area_dict = {}
for label in labels:
    area_dict[label] = 0
for row in range(rows):
    for col in range(cols):
        if img_open[row][col]:
            area_dict[img_label[row][col]] += 1

# 设置单个颗粒的面积阈值
single_area = 420  # 经过调试,420是个不错的选择

# 相互重叠的图像(面积 > 单个颗粒的图像)
img_overlap = np.zeros((rows, cols), np.uint8)
for row in range(rows):
    for col in range(cols):
        if img_label[row][col] and area_dict[img_label[row][col]] > single_area:
            img_overlap[row][col] = 255

# 剩下的就是单个颗粒的部分
img_single = img_open - img_overlap

# 显示结果
_, ax_list = plt.subplots(1, 5, figsize=(20, 10))
ax_list[0].set_title("原图")
ax_list[0].imshow(img, cmap="gray")
ax_list[1].set_title("开运算")
ax_list[1].imshow(img_open_backup, cmap="gray")
ax_list[2].set_title("与边界融合")
ax_list[2].imshow(img_bounds, cmap="gray")
ax_list[3].set_title("相互重叠")
ax_list[3].imshow(img_overlap, cmap="gray")
ax_list[4].set_title("没有重叠")
ax_list[4].imshow(img_single, cmap="gray")
plt.show()

实现结果

数字图像处理 - 形态学算法 - 颗粒划分 - 冈萨雷斯第三版 - 9.36

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/125258729文章来源地址https://www.toymoban.com/news/detail-440352.html

到了这里,关于数字图像处理 - 形态学算法 - 颗粒划分 - 冈萨雷斯第三版 - 9.36的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机视觉】图像处理算法(形态学滤波篇)

    来源:《OpenCV3编程入门》,怀念毛星云大佬🕯️ 说明: 本系列重点关注各种图像处理算法的原理、作用和对比 数学形态学的概念: 数学形态学(Mathematical morphology)是立在格论和拓扑学基础之上的图像分析学科,足数学形态学阁像处现的基本理论。其基本的运算包括:二值腐

    2024年03月10日
    浏览(52)
  • 基于图像形态学处理的目标几何形状检测算法matlab仿真

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程     matlab2022a        目标几何形状检测是计算机视觉领域中的重要任务之一,旨在从图像中自动识别和定位不同的几何形状,例如矩形、圆形、三角形等。这些形状检测在许

    2024年02月14日
    浏览(56)
  • 【C++】【图像处理】形态学处理(腐蚀、膨胀)算法解析(以.raw格式的图像为基础进行图像处理、gray levels:256)

        总结 针对处理二值图图像时,腐蚀或膨胀算法的核心: 1、确定该点(假设为A点)的灰度级,是0还是255; 2、遍历以该点为中心的3x3的邻域,获取灰度级等于0或者等于255的像素点个数,使用 flag 变量记录; 3、当 flag 大于设定的数值时,则A点的灰度级将被赋值为0或者

    2024年02月05日
    浏览(55)
  • 形态学运算与仿真:图像处理中形态学操作的简单解释

    形态学是图像处理领域的一个分支,主要用于描述和处理图像中的形状和结构。形态学可以用于提取图像中的特征、消除噪声、改变图像的形状等。其中形态学的核心操作是形态学运算。 形态学运算是一种基于形状的图像处理技术,它是通过结构元素与图像进行特定运算的方

    2024年02月04日
    浏览(64)
  • 第九章 形态学图像处理

    图像形态学也叫数学形态学,是指一系列处理图像 形状特征 的图像处理技术,是一门建立在格伦和拓扑学基础上的图像分析学科,是数学形态学图像处理的基本理论。其基本思想是利用一种特殊的 结构元 来测量或提取输入图像中相应的形状或特征,以便进一步进行图像分析

    2024年02月09日
    浏览(39)
  • 形态学图像处理和图像分割MATLAB实验

    一、实验目的 理解腐蚀和膨胀的原理,掌握开运算、闭运算及形态学的边界提取。 掌握孤立点检测、线检测和边缘检测的方法。 掌握全局阈值处理的方法。 二、实验内容 1. 开运算和闭运算实验。 图1(a)显示了一幅被噪声图像污染的指纹图像,图1(b)给出了结构元,请自编程

    2024年02月06日
    浏览(47)
  • 图像处理技巧形态学滤波之腐蚀操作

    欢迎回来,我的图像处理爱好者们!今天,让我们深入研究图像处理领域中的形态学计算。这些非线性的图像处理技术允许我们操纵图像中对象的形状和结构。在本系列中,我们将依次介绍四种基本的形态学操作:腐蚀、膨胀、开操作和闭操作。 闲话少说,我们直接开始吧!

    2024年02月13日
    浏览(51)
  • OpenCV图像处理学习十,图像的形态学操作——膨胀腐蚀

    一.形态学操作概念 图像形态学操作是指基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学对图像进行处理。 形态学有四个基本操作:腐蚀、膨胀、开操作、闭操作,膨胀与腐蚀是图像处理中最常用的形态学操作手段。 二.形态学操作-膨胀 跟卷积

    2024年02月05日
    浏览(53)
  • 简要介绍 | 基于Python的图像形态学处理概述

    注1:本文系“简要介绍”系列之一,仅从概念上对基于Python的图像形态学处理进行非常简要的介绍,不适合用于深入和详细的了解。 Digital terrain models from airborne laser scanning for the automatic extraction of natural and anthropogenic linear structures In: Geomorphological Mapping: a professional handbook of

    2024年02月10日
    浏览(41)
  • OpenCV基本图像处理操作(一)——图像基本操作与形态学操作

    图像显示 转hsv图像 颜色表示为三个组成部分:色调(Hue)、饱和度(Saturation)和亮度(Value)。常用于图像处理中,因为它允许调整颜色的感知特性,如色彩和亮度,这些在RGB颜色模型中不那么直观。 HSV模型特别适用于任务如图像分割和对象追踪,因为它可以更好地处理光

    2024年04月22日
    浏览(82)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包