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

Image 如何过滤RGB图像并转换为BW图像,image,matlab,image-processing,Image,Matlab,Image Processing,我一直在努力做到这一点: ->(您可以忽略红线,我只是添加它们来说明最终目标) 所以,我在第一种情况下所做的是:使用MatLab,我转换rgb->hsv,并拾取s通道(也称为饱和)。然后我使用大津(在matlab中称为灰度阈值)进行二值化并转换成黑白图片。一切都很顺利 现在,在第二种情况下,这不太管用: 基本img()->S通道()->Otsu() 如您所见,大津滤波器在这种情况下变得无用。我应该采取什么变通办法或其他方式?提前谢谢 您可以使用k-means执行图像量化。所以你知道你必须以这样一

我一直在努力做到这一点:

->(您可以忽略红线,我只是添加它们来说明最终目标)

所以,我在第一种情况下所做的是:使用MatLab,我转换rgb->hsv,并拾取s通道(也称为饱和)。然后我使用大津(在matlab中称为灰度阈值)进行二值化并转换成黑白图片。一切都很顺利

现在,在第二种情况下,这不太管用:

基本img()->S通道()->Otsu()


如您所见,大津滤波器在这种情况下变得无用。我应该采取什么变通办法或其他方式?提前谢谢

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

k-均值颜色量化过程的细节: 1.首先在
nx3
矩阵中收集图像中的所有像素。然后使用k-means将
nx3
矩阵划分为3或4个簇。 2.在将其划分为4个簇之前,预先定义质心。您可以通过阅读MatlabKmeans算法的文档来实现这一点。必须设置的参数是kmeans的“选项”字段中的“开始”。 3.因此,黄色(以及其他“接近”它的颜色)应该属于预定义的簇。(因此,如果为黄色定义了簇1和簇2,则应将所有黄色像素标记为1或2。其他像素将标记为3或4。) 4.现在,将图像转换为二进制图像,使落入黄色簇(即本例中的簇1和簇2)的像素为1,其他像素为0

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


我希望这能在更高的层次上明确这一过程。如果您有任何错误,请发布您的代码。

谢谢,但我不知道如何做到这一点,我当然尝试过谷歌搜索,但没有找到实现您具体所说内容的方法。你能给我提供一个链接来举例说明静脉中的某些东西吗?我使用的是Matlab,但实际上我不喜欢使用哪种程序语言。非常感谢提供更详细的信息,Parag。说真的,这意味着很多!我还是有一些问题。我完全理解你的意思,我必须使用“开始”并将1和2个簇定义为表示黄色的矩阵。我的问题是,如何将黄色表示为矩阵?以下是我到目前为止的进展:
img=imread('E:\Mazealgorithm\MazesToConvert\2.jpg','jpg');flatImg=双(重塑(img,尺寸(img,1)*尺寸(img,2),尺寸(img,3));idx=kmeans(Flatimg4);imagesc(重塑(idx,大小(img,1),大小(img,2))附言:我应该在这里回答吗?谢谢你持续的详细解释,我想我现在明白了,我
已经用k-means做了一段时间的测试,结果真的非常令人惊讶:让我给你看一个例子:[link](http://prntscr.com/uopsb)这是我使用两个起始质心得到的:[132 117 86]和[155144112](均为黄色)
idx=kmeans(flatImg,2,'start',[132 117 86;155144112;])`(以下是我的代码以供比较)。我以为k-means应该把黄色和其他颜色“分开”,这个蓝色从哪里来?如果你分成两组,其他颜色会去哪里?你应该分成两个以上的簇,比如说4个。或者分为两类,一类为黄色,另一类为橙色。另外,您确定初始质心选择是好的吗?你可以将颜色可视化。其中一个是使用mmg的方法:ColorNegate[Closing[Opening[Binarize[s,method->“Median”],1],2]]另一个我发现的方法是使用双线性过滤器,然后使用Otsu,效果很好。看看直方图,试试更简单的方法,比如直方图的平均值或中值(提示:它们在这里都很好用).这个问题的问题是它依赖太多的外部内容。你可以通过在问题中加入谷歌短链接指向的内容来解决这个问题。如果您不知道如何在帖子中包含图像,请参阅此帮助文章:谢谢。