我无法找到RGB图像的答案。
如何使用MATLAB获得RGB图像的SD值,平均值和熵?
来自http://airccse.org/journal/ijdms/papers/4612ijdms05.pdf TABLE3,似乎他得到了一个答案,所以他得到了RGB值的平均值?
真的需要任何帮助。
答案 0 :(得分:5)
阅读完论文后,由于您正在处理彩色图像,因此您可以访问三个信息渠道。这意味着您可以更改彩色图像的其中一个通道,但它仍然可能会影响它尝试描绘的信息。作者并没有非常清楚他们如何只获得一个代表整体均值和标准差的值。坦率地说,因为这篇论文是在一份无名期刊上发表的,所以我对他们如何成功逃脱它并不感到惊讶。如果试图在更知名的期刊(IEEE,ACM等)上发表这篇文章,由于这种模糊性,这可能会被彻底拒绝。
关于我如何解释这个过程,平均所有三个通道是没有意义的,因为你想要捕获所有通道的差异。进行此平均化会抹掉信息,这些差异会丢失。实际上,如果你对所有三个频道进行平均,一个频道应该将其强度改变为1,并且当你将频道平均在一起时,报告的平均值会非常小,以至于它可能不会记录为有意义的差异。
在我看来,你应该做的是将整个RGB图像视为一维信号,然后执行该图像的均值,标准偏差和熵。因此,给定存储在image_rgb
中的RGB图像,您可以将整个图像展开为一维数组,如下所示:
image_1D = double(image_rgb(:));
double
投射非常重要,因为您希望在计算平均值和标准偏差时保持浮点精度。图像可能是无符号整数类型,因此必须进行此转换以保持浮点精度。如果你不这样做,你的计算可能会被饱和或限制超出该数据类型的限制,并且你不会得到正确的答案。因此,您可以像这样计算平均值,标准偏差和熵:
m = mean(image_1D);
s = std(image_1D);
e = entropy(image_1D);
entropy
是MATLAB中的一个函数,可以计算图像的熵,所以你应该没问题。正如@CitizenInsane在他的回答中所指出的,entropy
将灰度图像展开为1D向量,并在该1D向量上应用熵的香农定义。在类似的标记中,您可以使用RGB图像执行相同的操作,但我们已经将信号展开到1D矢量中,因此entropy
的输入肯定非常适合展开的RGB图像。
答案 1 :(得分:2)
我不知道作者是如何做到的。但你可以做的是将图像视为大小为WxHx3的一维数组,然后简单地计算平均值和标准偏差。
答案 2 :(得分:2)
不知道表3是否以相同的方式获得,但至少在matlab的图像工具箱中查看entropy
例程,RGB值被矢量化为单个矢量:
I = imread('rgb'); % Read RGB values
I = I(:); % Vectorization of RGB values
p = imhist(I); % Histogram
p(p == 0) = []; % remove zero entries in p
p = p ./ numel(I); % normalize p so that sum(p) is one.
E = -sum(p.*log2(p));