如何过滤RGB图像并转换为BW图像

时间:2013-03-01 20:05:23

标签: image matlab image-processing

我一直在尝试这样做:

http://prntscr.com/umv66 - > http://goo.gl/Bgmv2(你可以忽略红线,我只是添加它们来说明最终目标)

所以,我在第一个案例中所做的是:使用MatLab,我转换了rgb - > hsv并选择了s频道(a.k.a饱和度)。然后我使用Otsu(在matlab中称为graythresh)来二值化并转换成黑白图片。一切都很完美。

现在,在第二种情况下,这不能很好地运作:

Base img(http://goo.gl/OtK4G) - > S频道(http://goo.gl/oo8h6) - > Otsu(http://goo.gl/cnfxU

如您所见,在这种情况下,Otsu过滤器变得无用。我应该采取任何解决方法或其他方式吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用k-means执行图像量化。因此,您知道必须将图像二值化,使黄色阴影变为白色,其他一切变为黑色。因此,将您的图像划分为适当数量的聚类(4可能有效)。 2为黄色阴影,2为其他阴影。不要忘记预定义初始质心。在此之后,您可以说,标记为黄色质心的像素被重新标记为一个。这可能有用。

k-means颜色量化过程的细节: 1.首先在nx3矩阵中收集图像中的所有像素。然后使用k-means将nx3矩阵分成3或4个簇。 2.在将其潜入4个星团之前,预定义质心。您可以通过阅读MATLAB kmeans算法here的文档来完成此操作。您必须设置的参数是kmeans的'options'字段中的'start'。 因此,黄色(以及与其“接近”的其他颜色)应落入预定义的簇中。 (因此,如果您将群集1和2定义为黄色,则应将所有黄色像素标记为1或2.其他像素将标记为3或4.) 4.现在,将图像转换为二进制,使得落入黄色簇的像素(即本例中的簇1和2)应为1,其他为零。

有关预定义集群的更多详细信息: 来自kmeans文档: 可以在start kmeans参数中将起始质心定义为质心起始位置的k-by-p矩阵。在您的情况下,它将是黄色的RGB值。查看图像中存在的黄色的几个像素值。如果它们有太多偏差,则为它们定义两个簇,否则为一个簇。如果您定义了两个,则start参数将具有2x3矩阵。您应该始终记住,centroid中的列数将等于数据中的列数。

我希望这会让这个过程更加清晰。如果您有任何错误,请发布您的代码。