python - 将灰度图像分量颜色分割成黑色、白色和灰色
问题描述
经过很长时间的尝试,我仍然找不到解决问题的合适方法。问题是将这个灰度图像分割成 3 种不同的颜色:边界应该是黑色,边界的内部空间应该是白色,而所有其他介质应该是黑色。
我尝试了几种不同的方法,包括直截了当的强度分割和其他一些形态分割。但是我得到的有两个主要问题:
- 黑色边界内总是有一些我无法删除的灰色像素。(主要关注)
- 对于那些小物件,分割后很可能会丢失细节。
当前结果:
预期的输出应该有三种不同颜色的清晰边界,至少不应该在黑色边界内有灰线。我的意思是在黑色的边界内,它应该是全白的,没有任何灰色。有点像我创建的这个图像,它们没有完全相同的结构,但请注意它是多么干净,这种干净和精确的分割是我想要的。
预期结果:
解决方案
您需要应用一些区域填充效果。有两个对你有很大好处,特别是因为你擅长寻找黑色边界。按照您已经完成的操作来确定这些。您还需要替换任何没有内部的小(根据您的定义)黑色区域,将其变为灰色(暂时;可能会改变)。
- 找到每个区域的内壳和外壳(已知算法)。里面的东西都变白了;外面的一切都变灰了。
- 在所有区域应用“影响抖动”:用其直接邻居的平均值替换每个像素;黑色像素不参与。重复平均操作,直到每个区域稳定在白色或灰色值附近。然后将整个区域驱动到该值。
.
推荐阅读
- python - 在另一个 python 程序中使用虚拟键盘输入条目
- vue.js - Vuetify 按钮组 + TipTap 编辑器
- android - 如何在不同的类中建立改造和 RxJava 之间的联系?
- javascript - 访问json数组的第一个元素
- c# - java - 如何从android中的字节数组中创建位图图像?
- gradle - JFrog Artifactory 不生成依赖声明
- php - php 不会将我引导到“操作”页面
- vhdl - 如何以通用方式编写此代码(使用可以在每个项目中递增的计数器的状态机)
- pyspark - 如何在 PySpark 中的另一列给定的范围内创建包含所有值的列
- android - Luxand API 在 android 上的相似性