Matlab中的函数hist
和函数有什么区别?imhist
我有一个从图像加载的颜色级别值矩阵,imread
需要使用直方图计算图像的熵值。
当使用imhist
生成的矩阵时,除了最后一个(右下)包含一些高值数字(几千左右)之外,所有位置都包含零。因为该输出似乎是错误的,所以我尝试使用 hist 代替,imhist
结果值要好得多,矩阵用看起来正确的值而不是零来实现。
但是,根据文档,imhist
在这种情况下应该会更好,并且hist
应该给出奇怪的结果..
不幸的是,我不擅长 Matlab,所以我无法为您提供更好的问题描述。不过,我将来可以添加一些其他信息。
所以我会尝试更好地解释我的问题..我有一个图像,我应该计算熵和其他一些值(保存该图像需要多少字节,..)。我写了这个函数,它工作得很好
function [entropy, bytes_image, bytes_coding] = entropy_single_pixels(im)
im = double(im);
histg = hist(im);
histg(histg==0) = [];
nzhist = histg ./ numel(im);
entropy = -sum(nzhist.*log2(nzhist));
bytes_image = (entropy*(numel(im))/8);
bytes_coding = 2*numel(unique(im));
fprintf('ENTROPY_VALUE:%s\n',num2str(entropy));
fprintf('BYTES_IMAGE:%s\n',num2str(bytes_image));
fprintf('BYTES_CODING:%s\n',num2str(bytes_coding));
end
然后我必须计算相同的值,但我必须从彼此下方的像素中进行“配对”。所以我只有一半的行和相同的列数。我需要将每个唯一的像素对表示为不同的数字,因此我将第一个像素对乘以 1000 并将第二个像素对添加到其中...随后我需要实际应用与第一个示例相同的函数,但这就是时间,当我从imhist
函数中得到奇怪的数字时。使用 hist 时,似乎还可以,但我真的不认为这种行为是正确的,所以这一定是我在某个地方的错误。我实际上非常了解我想要做什么,或者至少我希望如此,但不幸的是,Matlab 让我觉得这一切都很难:)