通过MATLAB编写统计一幅灰度图像的直方图函数(避免使用imhist,histogram作为函数名,返回每个灰度级出现频率的向量),定义一个并在同一个图形窗口中显示该图像及其灰度直方图
时间: 2024-09-25 22:06:36 浏览: 34
当你想编写一个自定义的函数来统计一幅灰度图像的直方图,但不使用`imhist`或`histogram`函数时,你可以按照以下步骤创建一个名为`custom_histogram`的函数,该函数接收一个灰度图像作为输入,计算每个灰度级别的频率,并在同一图形窗口中显示图像和直方图。
```matlab
function [hist, plot] = custom_histogram(gray_image)
% 参数:
% gray_image: 输入的灰度图像
% 计算直方图
min_val = min(gray_image(:));
max_val = max(gray_image(:));
num_bins = 256; % 设置灰度级别数量(可根据需要调整)
histogram_data = zeros(1, num_bins);
for i = min_val:max_val
idx = find(gray_image == i);
histogram_data(i) = length(idx); % 统计每个灰度值的数量
end
% 创建直方图向量
hist = histogram_data / sum(histogram_data); % 归一化频率
% 显示图像
figure;
subplot(1, 2, 1);
imshow(gray_image);
% 创建并绘制直方图
plot_hist = bar(hist, 'FaceColor', 'interp');
set(plot_hist, 'XTickLabel', linspace(min_val, max_val, num_bins+1)); % 标记x轴上的灰度值
xlabel('Gray Level');
ylabel('Frequency');
title('Image and Custom Histogram');
% 返回直方图向量和直方图图例
plot = plot_hist;
end
```
要使用这个函数,只需调用它并将你的灰度图像传递给它,例如:
```matlab
gray_image = imread('your_grayscale_image.jpg'); % 替换为你的图像文件名
[hist, plot] = custom_histogram(gray_image);
```
这将在当前的工作空间中生成一个图像和其对应的直方图。如果你没有指定特定的图像文件,记得检查路径是否正确。