相关疑难解决方法(0)

python opencv中的不规则形状检测和测量

我试图在python中使用OpenCV进行一些图像分析,但我认为图像本身会非常棘手,而且之前我从未做过这样的事情,所以我想说出我的逻辑,也许会得到一些想法/实用代码实现我想做的事情,在我投入大量时间走错路之前.

这个帖子非常接近我想要达到的目标,在我看来,使用的图像应该比我的更难分析.我会对那些彩色斑点的大小感兴趣,而不是它们与左上角的距离.我也一直在关注这段代码,虽然我对参考对象并不特别感兴趣(仅以像素为单位的尺寸就足够了,之后可以转换).

这是输入图像:

在此输入图像描述

你正在看的是冰晶,我想找到每个冰晶的平均大小.每个界限都有相当明确的定义,所以概念上这是我的方法,如果这是错误的方法,我想听听任何建议或意见:

  1. RGB中的图像被导入并转换为8位灰色(根据我在ImageJ中的测试,32会更好,但我还没想到如何在OpenCV中做到这一点).
  2. 边缘可选地是高斯模糊的以消除噪声
  3. Canny边缘探测器拾取线条
  4. 进行形态变换(侵蚀+膨胀)以试图进一步缩小边界.

在这一点上,似乎我可以做出选择.我可以对图像进行二值化,并测量高于阈值的斑点(即斑点为白色时的最大值像素),或者通过更完整地关闭和填充轮廓来继续边缘检测.虽然看了那个教程,轮廓似乎很复杂,虽然我可以让代码在我的图像上运行,但它并没有正确地检测到晶体(不出所料).我也不确定在二值化之前我是否应该进行变换?

假设我可以完成所有工作,我认为合理的测量将是最小封闭框或椭圆的最长轴.

我还没有完全解决所有的阈值,因此有些晶体被遗漏了,但由于它们被平均化,所以目前这并没有出现大问题.

该脚本在处理图像时会存储处理后的图像,所以我也希望最终的输出图像类似于链接的SO线程中的"标记的blob"图像,但每个blob都可以注释其尺寸.

这是一个(不完整的)理想化输出的样子,每个晶体都被识别,注释和测量(当我走得那么远时,我非常确定我可以解决测量).

在此输入图像描述


简化了图像和之前的代码尝试,因为它们使线程过长并且不再相关.


编辑III:

根据评论,分水岭算法看起来非常接近实现我所追求的目标.这里的问题是,分配算法所需的标记区域非常困难(http://docs.opencv.org/3.2.0/d3/db4/tutorial_py_watershed.html).

我不认为这是通过二值化过程可以通过阈值解决的问题,因为谷物的表观颜色变化远大于该线程中的玩具示例.

在此输入图像描述

编辑IV

这是我玩过的其他一些测试图像.它的表现比我预期的更小的水晶要好得多,显然很多可以通过我尚未尝试的阈值来完成.

这里是1,左上角到右下角对应于Alex在下面的步骤输出的图像.

在此输入图像描述

这是第二个更大的晶体.

在此输入图像描述

您会注意到这些颜色往往更均匀,但更难辨别边缘.我发现有点令人惊讶的是边缘泛滥对某些图像有点过于热心,我原本认为对于具有非常微小晶体的图像尤其如此,但实际上它似乎有更多的效果在较大的那些.从我们的实际显微镜可能有很大的空间来改善输入图像的质量,但是编程可以从系统中获得的"松弛"越多,我们的生活就越容易!

python opencv image image-processing computer-vision

7
推荐指数
1
解决办法
6416
查看次数

Python和opencv:如何将此图像的所有背景转换为一种颜色或透明

我使用图像1上的阈值掩模(图像2)创建了下面的图像(图像3).我试图将图像3(肺部)的中心图像之外的所有像素转换为一种颜色(例如黑色) OpenCV的.基本上这样我只剩下肺部的图像对着均匀的背景(甚至透明).我的问题是图像3上的外部像素与肺部内部像素的相似性.这是否可以使用opencv?

图片1

图片2

图像3

python opencv image

0
推荐指数
1
解决办法
3057
查看次数