RGB 图像的图像参数(标准差、平均值和熵)
Image Parameters (Standard Deviation, Mean and Entropy) of an RGB Image
我找不到 RGB 图像的答案。
如何使用 MATLAB 获取 RGB 图像的 SD、均值和熵的值?
从http://airccse.org/journal/ijdms/papers/4612ijdms05.pdf TABLE3,他似乎得到了一个答案,那么他得到了RGB值的平均值吗?
真的需要任何帮助。
不知道作者是怎么做到的。但是您可以做的是将图像视为大小为 WxHx3 的一维数组,然后简单地计算均值和标准差。
阅读论文后,因为你处理的是彩色图像,所以你可以访问三个信息通道。这意味着您可以更改彩色图像的其中一个通道,它仍然会影响它试图描绘的信息。作者不是很清楚他们是如何获得一个单一的值来表示总体均值和标准差的。坦率地说,因为这篇论文发表在一份无名期刊上,所以我对他们如何侥幸逃脱并不感到惊讶。如果试图将其发表在更知名的期刊(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
将灰度图像展开为一维向量,并将熵的香农定义应用于此一维向量。出于类似的原因,您可以对 RGB 图像执行相同的操作,但无论如何我们已经将信号展开为一维向量,因此 entropy
的输入肯定非常适合展开的 RGB 图像。
不知道table3是不是用同样的方法得到的,但至少看一下entropy
matlab图像工具箱中的例程,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));
我找不到 RGB 图像的答案。
如何使用 MATLAB 获取 RGB 图像的 SD、均值和熵的值?
从http://airccse.org/journal/ijdms/papers/4612ijdms05.pdf TABLE3,他似乎得到了一个答案,那么他得到了RGB值的平均值吗?
真的需要任何帮助。
不知道作者是怎么做到的。但是您可以做的是将图像视为大小为 WxHx3 的一维数组,然后简单地计算均值和标准差。
阅读论文后,因为你处理的是彩色图像,所以你可以访问三个信息通道。这意味着您可以更改彩色图像的其中一个通道,它仍然会影响它试图描绘的信息。作者不是很清楚他们是如何获得一个单一的值来表示总体均值和标准差的。坦率地说,因为这篇论文发表在一份无名期刊上,所以我对他们如何侥幸逃脱并不感到惊讶。如果试图将其发表在更知名的期刊(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
将灰度图像展开为一维向量,并将熵的香农定义应用于此一维向量。出于类似的原因,您可以对 RGB 图像执行相同的操作,但无论如何我们已经将信号展开为一维向量,因此 entropy
的输入肯定非常适合展开的 RGB 图像。
不知道table3是不是用同样的方法得到的,但至少看一下entropy
matlab图像工具箱中的例程,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));