将我的评论扩展为完整的答案;
@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 空间中的最小球体的中心,您可以尝试:
- 找出 {N} 中相距最远的两点 N1 和 N2。N1 和 N2 之间的距离是包围所有点的最小球体的直径。(证明:任何更小的球体都不能同时包围 N1 和 N2。)
- 中位数则介于 N1 和 N2 之间:
M = (N1+N2)/2
。
编辑3:以上仅在没有三点等距的情况下才有效。也许您需要询问 math.stackexchange.com?
编辑 4:维基百科再次提供!最小圆问题,Bounding sphere。