matlab统计并绘制图像的直方图不用imhist
时间: 2023-07-20 11:01:33 浏览: 292
### 回答1:
在MATLAB中,可以使用`histogram`函数来统计并绘制图像的直方图,而不需要使用`imhist`函数。`histogram`函数可以接受图像数据作为输入,并返回直方图的统计结果。下面是使用`histogram`函数进行直方图绘制的示例代码:
```matlab
% 读取图像
img = imread('image.jpg');
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 统计直方图
hist_data = histogram(double(gray_img(:)), 'Normalization', 'probability');
% 获取直方图统计结果
bin_centers = hist_data.BinEdges(1:end-1) + diff(hist_data.BinEdges)/2;
bin_counts = hist_data.Values;
% 绘制直方图
figure;
bar(bin_centers, bin_counts);
title('直方图');
xlabel('灰度级');
ylabel('频率');
% 显示图像
figure;
imshow(gray_img);
title('原始图像');
```
在上述示例代码中,我们首先读取了一幅图像,并将其转换为灰度图像。然后,使用`histogram`函数对灰度图像进行统计,并将统计结果存储在`hist_data`变量中。接着,我们从`hist_data`中获取直方图的统计结果,包括每个直方柱的中心点坐标(`bin_centers`)和频率(`bin_counts`)。最后,我们使用`bar`函数绘制直方图,以及使用`imshow`函数显示原始图像。
需要注意的是,在`histogram`函数中,我们将灰度图像转换为`double`类型,并使用`Normalization`参数设置为'probability',以便获取每个灰度级的频率。你可以根据需要调整参数,例如使用'count'来统计每个灰度级的像素个数。
请注意,以上代码仅仅是一种简单示例,你可以根据需要进行修改和改进。
### 回答2:
在MATLAB中,我们可以使用histcounts函数进行统计并绘制直方图。
首先,假设我们有一组数据存储在一个向量或数组中,例如x = [1, 2, 3, 4, 4, 4, 5, 5, 6, 6, 6]。我们想统计x中每个数值出现的次数,并将结果绘制成直方图。
首先,我们可以使用unique函数找出x中的唯一值,以及它们在x中的索引位置。然后,使用histcounts函数统计每个唯一值的次数,并设置'BinEdges'参数为唯一值的边界。最后,使用bar函数绘制直方图。
下面是实现的代码:
x = [1, 2, 3, 4, 4, 4, 5, 5, 6, 6, 6];
unique_values = unique(x); %找出x中的唯一值
counts = histcounts(x, 'BinEdges', [unique_values, max(unique_values)+1]); %统计每个唯一值的次数
bar(unique_values, counts); %绘制直方图
这样,就可以得到统计结果并绘制出直方图。
### 回答3:
在Matlab中,我们可以使用一些函数来统计并绘制图像的直方图,而不使用imhist函数。
首先,我们需要读取目标图像,可以使用imread函数。例如,假设我们的图像文件名为image.jpg:
```
image = imread('image.jpg');
```
接下来,我们可以计算图像的直方图。为此,可以使用histcounts函数来计算每个灰度级别的像素数。然后,我们可以使用bar函数绘制直方图:
```
[counts, bins] = histcounts(image(:), 'BinMethod', 'integers');
bar(bins(1:end-1), counts);
xlabel('灰度级别');
ylabel('像素数');
title('图像直方图');
```
在这里,histcounts函数用于计算图像中每个灰度级别的像素数。它的'BinMethod'参数设置为'integers',表示使用整数灰度级别。count变量存储了每个灰度级别的像素数,而bin变量存储了对应灰度级别的边界。
最后,我们可以使用xlabel、ylabel和title函数为直方图添加标签。
这是一种在Matlab中统计并绘制图像直方图的替代方法,不需要使用imhist函数。
阅读全文