matlab自编程实现imhist
时间: 2023-11-21 21:57:58 浏览: 189
imhist是MATLAB中用于计算图像直方图的函数,自己编程实现也是非常简单的。
首先,假设我们已经读入了一张灰度图像,并将其存储在一个矩阵中(例如,名为“img”的MxN矩阵),我们可以按照以下步骤计算图像的直方图:
1. 创建一个长度为256的数组hist,表示每个像素值的出现次数。
2. 遍历整个图像矩阵,对于每个像素值,增加hist数组中相应值的计数器。
3. 将hist数组中的值除以图像中像素的总数,得到每个像素值的归一化直方图。
下面是MATLAB代码实现:
```
function H = my_imhist(img)
% 输入:灰度图像img
% 输出:图像的直方图H
% 创建长度为256的数组hist
hist = zeros(256, 1);
% 遍历整个图像矩阵,对于每个像素值,增加hist数组中相应值的计数器
[M, N] = size(img);
for i = 1:M
for j = 1:N
k = img(i, j);
hist(k+1) = hist(k+1) + 1;
end
end
% 将hist数组中的值除以图像中像素的总数,得到每个像素值的归一化直方图
H = hist / (M*N);
end
```
在这个函数中,我们首先创建了一个长度为256的hist数组(注意MATLAB中数组索引从1开始),然后遍历整个图像矩阵,对于每个像素值k,将hist(k+1)的计数器增加1。最后,我们将hist数组中的值除以图像中像素的总数,得到每个像素值的归一化直方图H。
使用这个函数可以如下调用:
```
img = imread('lena.png');
img = rgb2gray(img);
H = my_imhist(img);
bar(0:255, H);
```
这个例子中,我们读入了一张彩色图像,并将其转换为灰度图像,然后计算了图像的直方图,并使用bar函数绘制了直方图。
阅读全文