3

我是matlab的新手,所以如果我在这里要求显而易见的事情,请原谅我:我所拥有的是一组彩色摄影图像(所有相同的尺寸)。我想要做的是计算每个像素的颜色中值

我知道matlab中有一个中值滤波器,但据我所知,它并不能完全满足我的要求。因为我想为每个单独的像素计算整个图像集合之间的中值。

例如,如果我有三个图像,我希望 matlab 计算(对于每个像素)这三个图像中的哪个颜色值是中值。我该怎么做呢,有人知道吗?


编辑:据我所知,我必须将所有图像加载到一个矩阵中。矩阵必须有 4 个维度(高度、宽度、rgb、图像),并且对于每个像素和每种颜色,找到第 4 个维度(图像之间)的中值。这是正确的(并且可能)吗?我该怎么做?

4

2 回答 2

7

你的直觉是正确的。例如,如果您有图像 image_1、image_2、image_3,则可以将它们分配给 4 维矩阵:

X(:,:,:,1) = image_1;
X(:,:,:,2) = image_2;
X(:,:,:,3) = image_3;

然后使用:

Y=median(X,4);

得到中位数。

于 2012-02-18T16:04:42.797 回答
2

将我的评论扩展为完整的答案;

@prototoast 的回答很优雅,但是由于每个像素的 R、G 和 B 值的中位数是单独计算的,所以输出图像看起来会很奇怪。

要获得具有视觉意义的明确定义的中值,最简单的方法是在尝试获取中值之前将图像转换为黑白。

rgb2gray()来自图像处理工具箱的方法将保留每个像素的亮度,同时丢弃色调和饱和度。

编辑:

如果您想将“RGB 中值”定义为“笛卡尔坐标中的中间值”,这对于三个图像来说很容易做到。

考虑一个具有三种可能选择的中值颜色的单个像素,C1=(r1,g1,b1), C2=(r2,g2,b2), C3=(r3,g3,b3)。通常这些在 3D 空间中形成一个三角形。

取三种颜色之间的毕达哥拉斯距离:D1_2=abs(C2-C1), D2_3=abs(C3-C2), D1_3=abs(C3-C1)

选择“中位数”作为与其他两个距离最短的颜色。由三角形不等式提供,定义D1=D1_2+D1_3等和采取min(D1,D2,D3)应该工作。注意退化的情况:等边三角形(C1、C2、C3 等距)、线(C1、C2、C3 彼此成直线)或点(C1=C2=C3)。

请注意,这种考虑 3D 中值的简单方法很难扩展到超过三个图像,因为一组四个或更多 3D 点的“中值”有点难以定义。

编辑 2

要将 N 点的“中值”定义为将它们包围在 3D 空间中的最小球体的中心,您可以尝试:

  1. 找出 {N} 中相距最远的两点 N1 和 N2。N1 和 N2 之间的距离是包围所有点的最小球体的直径。(证明:任何更小的球体都不能同时包围 N1 和 N2。)
  2. 中位数则介于 N1 和 N2 之间:M = (N1+N2)/2

编辑3:以上仅在没有三点等距的情况下才有效。也许您需要询问 math.stackexchange.com?

编辑 4:维基百科再次提供!最小圆问题Bounding sphere

于 2012-02-18T16:23:57.907 回答