ImagePy对多孔材料泡孔结构识别解决方案

2023-10-20 03:20

本文主要是介绍ImagePy对多孔材料泡孔结构识别解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:闫霄龙_ImagePy
链接:

https://www.zhihu.com/question/64646107/answer/222832540
来源:知乎

acaa013480bc591626fa3ee7f12a371d.png


多孔材料泡孔结构的图像处理软件和经验?

d39bc8f6c519312e9e7a558ffcfacbf6.png 2da0f92e94993d03bc9503bd156d5746.png

大家好,我对多孔材料(如塑料泡沫、金属泡沫等)进行泡孔结构统计,需要用相关图像处理软件(如Image Pro Plus和Image J等)对其电镜照片进行处理和分析。需要得到的数据包括:泡孔平均直径、泡孔尺寸长径比、泡孔尺寸分布、泡孔数量密度

具体要求如下:

1.标尺确定:根据图片上的已有标尺进行标尺确定。

2.划定选区:在已有图片上划定需要进行分析的区域,上述参数均基于该选区进行。

3.确定测试项目:包括选区面积、选区内泡孔数量、选区内所有泡孔平均直径、选区内每个泡孔的当量直径、选区内所有泡孔的平均长径比、选区内每个泡孔的长径比、选区内泡孔的尺寸分布图。

4.泡孔识别:对泡孔进行识别、圈定,以便于分析;这是泡孔统计的关键。

5.数据导出:上述数据的导出,特别是选区内每个泡孔的当量直径和长径比的数据导出。

我尝试过使用上述两个软件,由于没有比较好的教程,感觉使用起来比较费劲。特别是第4步,比如IPP就需要把每个泡孔沿着泡孔壁单独圈画出来。由于泡孔统计需要统计的数目较多,一般不少于100个,所以操作起来非常麻烦。另外,还有一个致命的问题,貌似IPP的处理结果不能暂存。也就是说,一张图片我处理了一半,想暂存起来,下次继续处理;但是貌似IPP没有该功能,下次只能重新处理,又是非常麻烦!!可能是我没有找到科学的操作方法。

大家用过类似的处理软件吗?能否分享一下经验?或者比较快捷有效的教程?


以下是闫大超级耐心的回答:

你好,我是 ImagePy 专栏 作者,ImagePy是我个人开发的图像处理工具,可以解决你的问题。软件是开源免费的,你可以在 ImagePy下载。软件很大程度上借鉴了ImageJ,不过是用Python进行了彻底的重构和优化,扩展更方便。

512a34afa0faa44d772b2073973c2af7.png

分析你的问题,本质上是一个分割问题,而图像特征是孔的部分明显比较暗,分割线是亮的,可以考虑阈值分割。不过这个问题分割线很细,并且孔落在包围之内,所以用分水岭分割是非常合适的。

1.首先将图像转为8位灰度图像   Image > Type > 8-bit

7e00759a675d318fa870e3768fd507fb.png

2. 设定比例尺

2.1 右侧下拉菜单,选择测量工具箱

2b26bc8b99fed8833ec554711cc5a5ef.png

2.2 放大后用测距工具

起点左键单击,然后在终点右键单击。(可以先点击工具栏上的Mset按钮,设定线条和文字的颜色,默认是白色标记,但这里根据需要设置成蓝色线条和红色文字)

09c601b8601ed7599818f038c7196593.png

2.3 计算 200/35 ≈ 5.7,单位是 um,  Image > Scale And Unit

32f6a51f7ec3b57dbf26efa878c9c48e.png

3. 对图像进行一个高斯模糊,抑制细节,防止产生过分割。Process > Filters > Gaussian

ee5ed302a3ff8c5ef5155dee29193a8e.png

3. 选择极小值点作为种子  Process > Hydrology > Find Minimum

f28be73a3132d763b24b5fdd20d95ded.png

4. 用分水岭方法进行分割  Process > Hydrology > Watershed With ROI

582ed132bccec4e5a631fb70aa1c629f.png

我们可以重新打开一副图像进行叠加,查看分割效果。Process > Image Calculator

ca330847a88e7e46fea1e9f836d04fa8.png

效果基本OK,分割问题一般是为了统计,因而部分错误对整体影响不大,任何算法也不能保证100%符合人的心意。

5. 接下来我们开始测量,在此之前我们需要用矩形选区工具在图像上点一下,去掉选区,否则运算将只针对选区。

eecaee193761bbb6dc577f8ab1299bc3.png

6. 取反,由于统计区域默认是统计非零区域,因而我们对图像取反  Edit > Invert

6ffc257bf6ca3ad70a6c4beed0f24a76.png

为了获取更好的视觉效果,我们把区域变暗,因为只要保证非零就可以进行统计。

Process > Math Multiply

dda0b0a149641023fe9fec6145040419.png

7. 进行区域分析  Analysis > Region Analysis > Gometry Analysis 进行几何分析,这里可以计算区域的质心,面积,周长,外接矩,等效半径,凸包面积,欧拉数,填充面积,丰满程度,协方差。我们这里勾上等效半径和协方差。

155c74b623497c1ac07907cf27e88096.png

确定后,我们得到如下结果

2ba88cd8d33e6d9241662e9714a81dff.png

8. 结果输出,可以在表格的 File > Save As > CSV 把结果输出成excel,从而方便的进行一些统计分析。以及图表绘制。

d3f04909aa98d8281943cc6aa10d2bbf.png

如有问题可以追问。

另外如果觉得ImagePy解决了你的问题,请到下载页面最后的连接给点一个赞。也欢迎大家加入QQ群:596310256 共同探讨学习图像处理问题。本人也在拟写一本通俗易懂的,理论,实验相结合的图像处理教程,敬请期待,如果又好的素材,也欢迎推荐。

对评论的一些补充:

1.如何调整局部分割结果

在得到分水岭分割后,新打开一张图像,乘以0.8,目的是为了让图像不会达到255最大值,这样可以与分割线再次阈值分离

0c91f2e1dda09ec47b38eaae71695f8c.png

利用之前介绍的叠加技术,把0.8倍灰度图叠加回原图,这样可以清楚看到差异。

699ae6b8f7109b0483fa88b4f9138b6f.png

利用画笔工具,进行手工绘制,双击取色器可以选择颜色,双击铅笔可以设置笔迹宽度。

a531e0568ccafebd2f17cd799ad8200c.png

然后手工擦掉错误连线,并且用纯白色绘制新的连线,可以用放大镜放大,新的连线必须闭合,不然会被当作相同区域。可以用宽度位2的笔绘制,这样更容易。(目前笔迹绘制到画布以外好像有点问题,我后面有时间调整一下)

949172b126998977dd8e38bcf0082e34.png

Image > Adjust > Threshold 对图像进行阈值处理(这里解释了叠加前为什么乘以0.8)

a2ee545c755fa24a4ee214d89a9637de.png

这里顺便提一下,基于统计结果,个别的分割不准确对全局的影响不大,所以只要大部分正确,不一定非要把每个都调整好。

2.  关于椭圆,所有的面积统计是基于真实区域,椭圆只是协方差的分析指标,结果的直径是等效直径,然而等效成圆,不够精确,那个椭圆是等效椭圆的分析结果,从上面可以看出协方差,方向,偏心率。换言之,椭圆告诉我们长轴,短轴,方向,而直径位于长短轴之间。

e1b08214833f6eadab428281a989ae46.png

3. 主要需要保存的图片是编辑过程的图,也就是手绘过程,因为其他过程,在熟悉流程之后,只用一分钟。手绘过程可以当作图片保存,之后可以再次打开,不过注意请选择bmp或png格式,不然会导致精度损失,无法阈值复原分割线。

c495ca22481c27a7d63553cbafb2079a.png

4. 关于局部分析

用选区工具选择一个矩形区域

e3e81f39f830134a8f8890cf9dd15f74.png

Image > Duplicate 进行复制

bcd628d7a36df9463048db0d1093ec1b.png

在此基础进行几何分析,得到的就是局部分析结果

9dd7d2be83ae63086cfa92bf61e51b3e.png

如有问题可以追问,最后再次广告一下:

另外如果觉得ImagePy解决了你的问题,请到下载页面最后的连接给点一个赞。也欢迎大家加入QQ群:596310256 共同探讨学习图像处理问题。本人也在拟写一本通俗易懂的,理论,实验相结合的图像处理教程,敬请期待,如果又好的素材,也欢迎推荐。

针对追问的再次补充(针对你的需求完善了软件,所以请先更新那个100K左右的软件包)

分析问题,这张图本质上还是分割问题,并且图像特征和之前的图很类似,而评判孔和缝隙的原则是图形的形状,孔比较圆,比较饱满,这个是我们主观的感受,那么思路就是对图像进行分割,然后用区域的指标进行碎片的筛选。下面我们开始操作,标尺等细节这里省略。

1.按照之前的方法对图像进行分割,找极小值这一部是根据视觉效果调整的,准则是每个内落下一个种子就好,这里选择8比较合适。

748b3668ebfdb3f08ce2b000f7b239ea.png

之后同样按照之前的流程得到这一步,我们看到基本得到了理想的分割线,(如果有不满意的可以在invert之前与原图叠加,手绘,不过必要性不大)

c49896b0676123d98a4e9f27ae6723d8.png

2. 进行区域筛选,这个功能是刚添加的。Analysis > Region Analysis > Geometry Filter

这一步的意思是根据这些指标对区域进行筛选,通过的设置位120,不通过的设置为0,填写整数表示选区大于等于该值的,负数代表小于该绝对值的。我们首先把面积不足100的小块去掉,当成是噪声。(注意如果设置了比例尺,这里应填写单位值,没有比例尺单位是像素

8764650d7df31a1552f6c3e771e495f5.png

其次,目标肯定是实心的,没有洞,因此holes填-1,代表小于1,也就是没有洞的.

6116c39b53948a3b03907e3d5c481e97.png

丰度,指的是丰满度,是面积和凸包面积的比值圆形最丰满,树杈最单薄。因为我们的目标都是比较饱满的,这里用0.8过滤。

e490e11973c554fc159bde92b219a8ca.png

偏心率,长短轴的比值,圆形是1,越椭圆,偏心率越大,这里再次解释了之前介绍的协方差和等效椭圆的意义。我们看到一些细长的目标再次被过滤掉。

73c42ebd9380dbb412091307214353d5.png

最后把back color填0,去掉,直接确定。

3d984251848973f8068b3a7c4f845b61.png

3. 手工填充,此时的结果已经过滤了大部分非法区域,如果仍有调整,可以用填充工具,用黑色进行区域填充。注意填充之前一定选择4邻域,不然会直接全部填满。

1438a2aacf6e7258088f5a3abac50b1e.png

双击填充工具进行设置

0368926f7bd4f5d0e4778b5606b0dbb3.png

参照原图填充被标尺污染的区域以及其他不应统计的区域(也不必非常认真)

c337cbc67caba5bd73bb176512bda9f2.png

4. 区域统计

b70a15f93f523059b22ecd76c266ab70.png

因为这个问题的复杂度已经比较高,甚至肉眼视觉上,也不是每个都可以明显区分是孔还是背景,我们采用的是转化成形态指标进行描述,过滤的方法,得到了相对理想的结果,在统计意义下应该是可以代表真实情况的。

这里提一下乘法Multiply()函数,除了上文提到的灰度值降低来变暗,或者便于二次分割的作用外,还可以进行灰度增强。比如:自身灰度叠加增强,将下图的src2换成src1,可以得到比较好的前处理效果。

一个例子,为了分析眼睛是睁开还是闭合的情况,使用乘法Multiply()函数身灰度叠加增强后,便于深度学习处理。

处理前:

2ebd24aaf9e13911924456a69352952e.png

处理后:

293d266dee0e468ee7d9065cf15b12bf.png

ImagePy具有相当高的可扩展性,以上功能是刚才我针对你提出的问题,快速完成的扩展功能。虽然现在还不出名,但希望ImagePy可以逐渐成为主流,成为一个免费、开源、分享的图像处理平台。

最后再次广告一下:

如果觉得ImagePy解决了你的问题,请到  阅读原文  给点一个赞。也欢迎大家加入QQ群:596310256 共同探讨学习图像处理问题。本人也在拟写一本通俗易懂的,理论和实验相结合的图像处理教程,敬请期待,如果有好的素材,也欢迎推荐。

33a999d4f412ac9f912cc83ff80ca117.png

推荐阅读:

ImagePy 三维分析及可视化解决方案

这篇关于ImagePy对多孔材料泡孔结构识别解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/244312

相关文章

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

明明的随机数处理问题分析与解决方案

明明的随机数处理问题分析与解决方案 引言问题描述解决方案数据结构设计具体步骤伪代码C语言实现详细解释读取输入去重操作排序操作输出结果复杂度分析 引言 明明生成了N个1到500之间的随机整数,我们需要对这些整数进行处理,删去重复的数字,然后进行排序并输出结果。本文将详细讲解如何通过算法、数据结构以及C语言来解决这个问题。我们将会使用数组和哈希表来实现去重操作,再利用排序算法对结果

UE5 半透明阴影 快速解决方案

Step 1: 打开该选项 Step 2: 将半透明材质给到模型后,设置光照的Shadow Resolution Scale,越大,阴影的效果越好

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

Science|癌症中三级淋巴结构的免疫调节作用与治疗潜力|顶刊精析·24-09-08

小罗碎碎念 Science文献精析 今天精析的这一篇综述,于2022-01-07发表于Science,主要讨论了癌症中的三级淋巴结构(Tertiary Lymphoid Structures, TLS)及其在肿瘤免疫反应中的作用。 作者类型作者姓名单位名称(中文)通讯作者介绍第一作者Ton N. Schumacher荷兰癌症研究所通讯作者之一通讯作者Daniela S. Thomm

MySQL主从同步延迟原理及解决方案

概述 MySQL的主从同步是一个很成熟的架构,优点为: ①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力; ②在从主服务器进行备份,避免备份期间影响主服务器服务; ③当主服务器出现问题时,可以切换到从服务器。 相信大家对于这些好处已经非常了解了,在项目的部署中也采用这种方案。但是MySQL的主从同步一直有从库延迟的问题,那么为什么会有这种问题。这种问题如何解决呢? MyS