1

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 让我觉得这一切都很难:)

4

2 回答 2

2

hist-计算彩色图像中的直方图(每个像素出现的计数)......

imhist- 计算二维图像中的直方图。

于 2012-10-19T06:53:52.253 回答
1

如果您想使用,请im2double使用. 该函数要求双精度或单精度数据在 [0,1] 数据范围内,这就是为什么您会在直方图的最后一个 bin 中看到所有内容的原因。doubleimhistimhist

于 2015-05-13T18:41:13.107 回答