在MATLAB中绘制直方图有多种方法,以下是几种常用的方法:
方法一:使用库函数 `imhist`
```matlab
% 读取图像
B = imread('cameraman.tif');
% 获取图像尺寸
[x, y] = size(B);
% 计算灰度直方图
number = zeros(x, y);
for i = 1:x
for j = 1:y
rank = B(i, j);
number(rank + 1) = number(rank + 1) + 1;
end
end
% 绘制直方图
subplot(1, 2, 1);
stem(number, '.');
title('库函数绘制的直方图');
```
方法二:使用内置函数 `bar`
```matlab
% 随机生成一组数据
a = round(10 * rand(5, 1));
% 绘制直方图
bar(a, 0.5, 'r'); % 设置宽度为0.5,颜色为红色
% 在直方图上方显示数值
for i = 1:length(a)
text(i, a(i), num2str(a(i)), 'VerticalAlignment', 'bottom', 'HorizontalAlignment', 'center', 'FontSize', 9, 'color', 'r', 'FontWeight', 'bold');
end
```
方法三:使用 `hist` 函数
```matlab
% 随机生成一组数据
data = [3, 7, 5, 2; 4, 3, 2, 9; 6, 6, 1, 4];
% 绘制直方图
b = bar(data);
% 设置条形颜色
set(b, 'FaceVertexCData', [1; 1; 1; 1; 2; 2; 2; 2; 3; 3; 3; 3; 4; 4; 4; 4]);
```
方法四:使用 `histfit` 函数
```matlab
% 生成随机数组
aa = randn(1000, 1);
% 绘制直方图
hist(aa);
% 添加拟合曲线
histfit(aa, 100);
```
方法五:自定义直方图函数
```matlab
function p = custom_hist(I, n_bins)
% 计算灰度图象的直方图数据
L = 256;
Ps = zeros(L, 1);
nk = zeros(L, 1);
[row, col] = size(I);
n = row * col;
for i = 1:row
for j = 1:col
num = double(I(i, j)) + 1;
nk(num) = nk(num) + 1;
end
end
% 计算直方图概率估计
for i = 1:L
Ps(i) = nk(i) / n;
end
% 绘制直方图
figure;
subplot(3, 1, 1);
imshow(I);
title('原图');
subplot(3, 1, 2);
plot(nk);
title('直方图(nk)');
subplot(3, 1, 3);
plot(Ps);
title('直方图(Ps)');
end
```
这些方法可以根据具体需求选择使用,例如绘制灰度直方图、彩色直方图、带拟合曲线的直方图等。希望这些示例代码对你有所帮助!