使用超像素进行区域合并

时间:2015-04-30 15:48:06

标签: matlab image-processing image-segmentation feature-extraction

我实施了SLIC算法来查找标签,我获得了标签。我想计算一个颜色特征向量,其中包含每个区域的颜色特征的平均值。对于每对相邻区域,如果它们的特征向量之间的欧几里德距离小于阈值,我将合并这两个区域。我会为所有相邻区域做这个。然后,我将重复步骤,直到不能合并任何区域对。但是,我不知道如何实施这些步骤。

1 个答案:

答案 0 :(得分:0)

您的颜色功能有几个选择,它们实际上取决于您的颜色空间,以及您要查找的信息。

  1. 如果您的目标是找到颜色相同的对象(对光照不变),我强烈建议您使用rgb2hsv转换常规rgb图像的hsv颜色空间,HSV颜色空间有三个通道(仅如RGB),它们是通道1 = H = Hue =颜色,通道2 = S =饱和度=颜色多么鲜艳,通道3 = V =亮度值=颜色有多亮。如果您想要找到不依赖于灯光的颜色,则所有值都在0和1之间。您的功能将仅仅是Hue通道。关于色调通道的一点是它实际上是循环的,所以0和1实际上是相同的(红色)。所以你的距离必须环绕。例如,像素A具有h = .7像素B具有H = 0.3像素C具有H = .01。哪个更接近像素A?你会立即猜测像素B,因为delta_H = .4但实际上delta和H对于a和c只有0.31

  2. 如果你不仅仅是通过色调对简单的颜色模型感兴趣,其他选择是YCbCr,YUV(大多数人只是使用YCbCr,因为matlab中没有TRUE YUV),CIE(也不是完全原生的matlab)但它在this example)中得到支持。这些中的每一个代表第一通道中的图像亮度。并且颜色由最后2个通道表示。使用最后两个通道,您可以轻松地绘制二维笛卡尔平面上的颜色,其中一个轴为channel2,另一个为通道3,就像这样(此示例特别是YCbCr色彩空间) enter image description here

    并且相似性度量可以是两种颜色之间的欧氏距离

  3. 我猜你的总体目标是某种压缩。所以我要做的只是替换像素值。因此,如果像素A和B相似,则使像素B的值=像素A.这意味着每次迭代都会减少图像中不同颜色的总数。而对于平均值,您仍然保持着许多不同的颜色。这样想吧

    替换 1.迭代1,像素A = x B = x + delta,它们足够接近,所以你说A = B = x 2.迭代2,像素B = x,C = x-delta,它们接近,所以你说B = C = x 3.此时你有A = B = C = x所以颜色数量从3减少到1

    平均 1.迭代1,像素A=x B=x+delta,它们现在很接近A=B=x+.5delta 2.迭代2,像素B=x+.5delta, C=x-delta,它们现在是B 3.此时你有A = B = C = x所以颜色数量从3减少到1