RGB 图像的图像参数(标准偏差、平均值和熵)



我找不到RGB图像的答案。

如何使用 MATLAB 获得 RGB 图像的 SD、平均值和熵值?

从表3 http://airccse.org/journal/ijdms/papers/4612ijdms05.pdf,他似乎得到了一个答案,那么他得到了RGB值的平均值吗?

真的需要任何帮助。

阅读论文后,由于您正在处理彩色图像,因此您有三种信息渠道可供访问。 这意味着您可以更改彩色图像的其中一个通道,它仍然可能影响它试图描绘的信息。 作者不太清楚他们如何只获得一个值来表示总体平均值和标准差。 坦率地说,因为这篇论文发表在一本无名期刊上,我并不惊讶他们是如何侥幸逃脱的。 如果试图在更知名的期刊(IEEE,ACM等)上发表这篇文章,由于这种模糊性,这可能会被彻底拒绝。

关于我如何解释此过程,对所有三个通道求平均值没有意义,因为您想捕获所有通道的差异。 进行这种平均将抹黑该信息,并且这些差异会丢失。 实际上,如果您对所有三个通道进行平均,如果一个通道将其强度改变为 1,并且当您将通道平均在一起时,报告的平均值将非常小,以至于它可能不会记录为有意义的差异。

在我看来,你也许应该做的是将整个RGB图像视为1D信号,然后执行该图像的平均值,标准差和熵。 因此,给定存储在 image_rgb 中的 RGB 图像,您可以将整个图像展开为一个 1D 数组,如下所示:

image_1D = double(image_rgb(:));

double转换很重要,因为您希望在计算平均值和标准偏差时保持浮点精度。 图像可能是无符号整数类型,因此必须执行此转换以保持浮点精度。 如果不这样做,则计算可能会饱和或超出该数据类型的限制,并且无法获得正确的答案。 因此,您可以像这样计算平均值、标准差和熵:

m = mean(image_1D);
s = std(image_1D);
e = entropy(image_1D);

entropy是 MATLAB 中的一个函数,用于计算图像的熵,所以你在这里应该没问题。 正如@CitizenInsane在他的回答中所指出的,entropy将灰度图像展开为一维向量,并将香农对熵的定义应用于该一维向量。 同样,您可以对 RGB 图像执行相同的操作,但无论如何我们已经将信号展开为 1D 矢量,因此输入到 entropy 中肯定非常适合展开的 RGB 图像。

我不知道

作者实际上是怎么做到的。但是你可以做的是,将图像视为大小为WxHx3的一维数组,然后简单地计算平均值和标准偏差。

不知道

表 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));

最新更新