MATLAB 图像处理 - 灰度直方图生成
灰度直方图是图像处理中的一种重要工具,用于显示图像的灰度分布情况。在 MATLAB 中,可以使用 imhist 函数生成灰度直方图。下面将详细介绍如何使用 MATLAB 生成灰度直方图。
需要读取图像文件,使用 imread 函数读取图像数据。例如,读取 rice.tif 图像文件:
```matlab
fn = 'rice.tif';
I = imread(fn);
```
接下来,需要计算灰度图象的直方图数据。需要将图像数据转换为灰度级,使用 double 函数将图像数据转换为双精度浮点数。然后,使用 for 循环遍历图像中的每个像素,计算每个像素的灰度级,并将其存储在 nk 数组中。
```matlab
L = 256; % 灰度级
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; % 统计 nk
end
end
```
接下来,计算直方图概率估计,使用 nk 数组计算每个灰度级的概率。
```matlab
for i = 1:L
Ps(i) = nk(i) / n;
end
```
使用 plot 函数绘制直方图,显示灰度分布情况。
```matlab
subplot(3, 1, 1); imshow(J), title('原图');
subplot(3, 1, 2), plot(nk), title('直方图(nk)');
subplot(3, 1, 3), plot(Ps), title('直方图(Ps)');
```
在上面的代码中,我们使用 subplot 函数将绘制的图像和直方图分成三个子图,分别显示原图、直方图(nk)和直方图(Ps)。
使用 imhist 函数也可以生成灰度直方图,imhist 函数将计算图像的灰度直方图,并返回灰度图象直方图数据。
```matlab
figure(4), imhist(hist);
p = imhist(hist);
figure(5), plot(p);
```
使用 MATLAB 生成灰度直方图可以使用 imhist 函数或手动计算灰度直方图数据,然后使用 plot 函数绘制直方图。