通过MATLAB编写统计一幅灰度图像的直方图函数(避免使用imhist,histogram作为函数名,返回每个灰度级出现频率的向量),定义一个并在同一个图形窗口中显示该图像及其灰度直方图。
时间: 2024-10-06 10:04:16 浏览: 211
在MATLAB中,你可以编写一个自定义的函数来计算和绘制灰度图像的直方图。这里是一个简单的示例,我们将这个函数命名为`grayHistPlot`:
```matlab
function [histData, histPlot] = grayHistPlot(img)
% img: 输入的灰度图像
% 将图像数据转换为一维向量
imgData = reshape(double(im2double(img)), [], 1);
% 计算直方图
numBins = 256; % 可根据需要调整灰度级数
[hist, binEdges] = histcounts(imgData, numBins); % 按灰度值分布计算频率
% 归一化直方图
hist = hist / sum(hist); % 确保概率总和为1
% 绘制图像和直方图
figure;
subplot(1, 2, 1);
imshow(uint8(img), 'InitialMagnification', 'fit');
title('Original Image');
subplot(1, 2, 2);
bar(binEdges(1:end-1), hist); % 由于bar函数需要的是中心位置,所以我们减去半个bin间隔
xlabel('Gray Level');
ylabel('Frequency (Normalized)');
title('Gray Level Histogram');
% 返回直方图数据和绘图结果
histData = hist;
histPlot = gca; % 返回当前活动的图形句柄
end
```
在这个函数中,我们首先将灰度图像展平成一维向量,然后使用`histcounts`函数计算直方图并将其归一化。接着,我们在一个图形窗口中显示原始图像和直方图,并返回直方图数据和直方图所在的图形句柄。
阅读全文