在新建的m文件中编写图像均衡代码,实现对图像灰度级点数、概率统计并计算概率累计分布函数。读取图像,对图像进行直方图均衡,显示均衡前后图像并画出直方图。
时间: 2024-03-25 10:40:44 浏览: 22
好的,下面是实现对图像灰度级点数、概率统计并计算概率累计分布函数、直方图均衡化的 Matlab 代码:
```matlab
% 读取图像
I = imread('image.jpg');
% 转换为灰度图像
gray_I = rgb2gray(I);
% 计算灰度级点数
num_gray_levels = 256;
% 初始化灰度级频数计数器
gray_level_counts = zeros(1, num_gray_levels);
% 统计每个灰度级的出现次数
for i = 1 : size(gray_I, 1)
for j = 1 : size(gray_I, 2)
gray_level_counts(gray_I(i, j) + 1) = gray_level_counts(gray_I(i, j) + 1) + 1;
end
end
% 计算每个灰度级的概率
gray_level_probabilities = gray_level_counts / (size(gray_I, 1) * size(gray_I, 2));
% 计算概率累计分布函数
cdf = cumsum(gray_level_probabilities);
% 直方图均衡化
J = histeq(gray_I);
% 显示图像及其灰度级点数和概率
figure;
subplot(2, 2, 1);
imshow(gray_I);
title('原图像');
subplot(2, 2, 2);
imshow(J);
title('均衡化后图像');
subplot(2, 2, 3);
bar(0 : num_gray_levels - 1, gray_level_counts);
title('灰度级点数');
subplot(2, 2, 4);
bar(0 : num_gray_levels - 1, gray_level_probabilities);
title('灰度级概率');
% 显示概率累计分布函数
figure;
plot(0 : num_gray_levels - 1, cdf);
title('概率累计分布函数');
xlabel('灰度级');
ylabel('累计概率');
% 显示均衡化前后的图像及其直方图
figure;
subplot(2, 2, 1);
imshow(gray_I);
title('均衡化前图像');
subplot(2, 2, 2);
imshow(J);
title('均衡化后图像');
subplot(2, 2, 3);
bar(0 : num_gray_levels - 1, gray_level_counts);
title('均衡化前直方图');
subplot(2, 2, 4);
bar(0 : num_gray_levels - 1, imhist(J));
title('均衡化后直方图');
```
这段代码中,我们首先读取了一幅彩色图像,并将其转换为灰度图像。然后,我们计算了灰度级的数量,并初始化了一个灰度级频数计数器。接着,我们遍历图像的每个像素,统计每个灰度级出现的次数,然后计算每个灰度级的概率。最后,我们使用 Matlab 内置函数 `cumsum` 计算概率累计分布函数,并对图像进行直方图均衡化,然后将均衡化前后的图像及其直方图分别显示出来。
希望这段代码能够帮助你完成任务!