使用matlab且不用imhist函数写一个求图片直方图的算法
时间: 2024-02-06 07:09:24 浏览: 29
以下是一个简单的 MATLAB 代码,用于计算图像的直方图:
```matlab
% 读取图像文件
img = imread('image.jpg');
% 初始化直方图 bins 和频率 freqs
bins = 0:255;
freqs = zeros(1, 256);
% 遍历图像中的每个像素,并更新频率
for i = 1:size(img, 1)
for j = 1:size(img, 2)
pixel_value = img(i, j);
freqs(pixel_value+1) = freqs(pixel_value+1) + 1;
end
end
% 绘制直方图
bar(bins, freqs);
title('Image Histogram');
xlabel('Pixel Value');
ylabel('Frequency');
```
这段代码首先读取一个名为“image.jpg”的图像文件。然后,它初始化一个长度为 256 的 bins 数组,用于表示直方图的 bins。接下来,它创建一个长度为 256 的 freqs 数组,用于存储每个像素值的频率。然后,它遍历图像中的每个像素,将其像素值作为 index,增加相应的频率。最后,它使用 MATLAB 的条形图函数 bar,将 bins 和 freqs 数组作为输入,绘制图像的直方图。
相关问题
使用matlab写一个求图片直方图的算法
以下是使用 MATLAB 编写求图像直方图的代码示例:
```matlab
% 读取图像
img = imread('image.jpg');
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 计算直方图
histogram = imhist(gray_img);
% 绘制直方图
bar(histogram);
```
在这个示例中,我们首先读取了一张图片 `image.jpg`,然后将其转换为灰度图像 `gray_img`。接着使用 `imhist()` 函数计算直方图,并将结果保存在 `histogram` 变量中。最后,我们使用 `bar()` 函数将直方图绘制出来。
注意,这只是一个简单的示例,实际中可能需要对图像进行预处理,如调整亮度、对比度等,以获得更好的效果。
使用 matlab 编程实现图像的直方图均衡化算法。
好的,下面是使用 Matlab 实现图像直方图均衡化的代码:
```matlab
clc; % 清除命令窗口
clear all; % 清除工作区变量
% 读入图像
img = imread('lena.jpg');
% 转化为灰度图像
img_gray = rgb2gray(img);
% 计算直方图
histogram = imhist(img_gray);
% 计算累积分布函数
cdf = cumsum(histogram) / numel(img_gray);
% 计算映射表
map = uint8(255 * cdf);
% 应用映射表进行直方图均衡化
img_eq = map(img_gray + 1);
% 显示原图和均衡化后的图像
figure;
subplot(121);imshow(img_gray);title('原图');
subplot(122);imshow(img_eq);title('均衡化后');
```
以上代码中,我们首先读入一张彩色图像并将其转化为灰度图像,然后计算灰度图像的直方图及其累积分布函数,再根据累积分布函数计算映射表,并利用映射表对原图像进行均衡化。最后将原图和均衡化后的图像显示出来。