用matlab写一个图像均衡化的程序,画出原图像的直方图和均衡图像的直方图
时间: 2023-09-10 15:05:52 浏览: 35
好的,下面是一个Matlab实现图像直方图均衡化的程序,包括绘制原图像的直方图和均衡图像的直方图:
```
% 读取图像
img = imread('image.jpg');
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 计算原图像的直方图
histogram = imhist(gray_img);
% 计算直方图均衡化后的像素值
cumulative_hist = cumsum(histogram) / numel(gray_img);
equalized_pixels = uint8(255 * cumulative_hist(gray_img + 1));
% 将像素值重构为均衡化后的图像
equalized_img = reshape(equalized_pixels, size(gray_img));
% 绘制原图像的直方图
subplot(1,2,1);
imhist(gray_img);
title('原图像的直方图');
% 绘制均衡图像的直方图
subplot(1,2,2);
imhist(equalized_img);
title('均衡图像的直方图');
% 显示原图像和均衡图像
figure;
subplot(1,2,1);
imshow(gray_img);
title('原图像');
subplot(1,2,2);
imshow(equalized_img);
title('均衡图像');
```
您可以将程序保存为.m文件后运行,替换'image.jpg'为您自己的图像文件名即可。
相关问题
请用Matlab写一个图像灰度变换程序,结果包括灰度直方图和均衡化后的灰度直方图
以下是使用Matlab编写的图像灰度变换程序,其中包括灰度直方图和均衡化后的灰度直方图:
```matlab
% 读取图像
img = imread('lena.png');
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 计算灰度直方图
histogram = imhist(gray_img);
% 计算累积概率分布函数
cdf = cumsum(histogram) / numel(gray_img);
% 计算灰度均衡化后的图像
eq_img = uint8(255 * cdf(double(gray_img) + 1));
% 计算灰度均衡化后的灰度直方图
eq_histogram = imhist(eq_img);
% 显示图像和灰度直方图
subplot(2,2,1), imshow(gray_img), title('原始图像');
subplot(2,2,2), bar(histogram), title('原始图像灰度直方图');
subplot(2,2,3), imshow(eq_img), title('均衡化后的图像');
subplot(2,2,4), bar(eq_histogram), title('均衡化后的灰度直方图');
```
这个程序读取名为“lena.png”的图像,将其转换为灰度图像,并计算其灰度直方图。然后,它计算累积概率分布函数,并将其用于灰度均衡化,生成均衡化后的图像和灰度直方图。最后,程序将原始图像、原始图像的灰度直方图、均衡化后的图像和均衡化后的灰度直方图显示在一个4个子图的窗口中。
注意,程序中使用的“imhist”函数可以计算图像的灰度直方图,“cumsum”函数可以计算累积概率分布函数。
运用matlab编写一个能计算一张图像直方图的程序和直方图均衡的程序,输出均衡前后的直方图。
以下是Matlab的示例代码:
计算图像直方图:
```matlab
% 读取图像
img = imread('test.jpg');
% 计算直方图
histogram = imhist(img);
% 绘制直方图
plot(histogram);
title('Image Histogram');
xlabel('Intensity Level');
ylabel('Pixel Count');
```
直方图均衡:
```matlab
% 读取图像
img = imread('test.jpg');
% 计算直方图
histogram = imhist(img);
% 计算累计分布函数
cdf = cumsum(histogram) / numel(img);
% 计算均衡化后的像素值
equalized_img = uint8(255 * cdf(double(img)+1));
% 绘制均衡化前后的直方图
subplot(2,1,1);
imshow(img);
title('Original Image');
subplot(2,1,2);
imhist(equalized_img);
title('Equalized Image Histogram');
```
上述代码可以计算出一张图像的直方图,并且对图像进行直方图均衡处理,最后输出均衡化前后的直方图。