编写matlab程序实现图像的的读入、显示、统计原图像灰度级像素个数、计算原始直方图、计算累计直方图、计算变换后的灰度值、进行灰度值变换、并在同一个窗口显示图像
时间: 2023-12-12 21:03:26 浏览: 88
matlab 自编灰度图像直方图 源程序
以下是一个简单的 Matlab 程序,可以实现您的要求:
```matlab
% 读入图像
img = imread('your_image.jpg');
% 显示原图像
figure;
subplot(2,2,1);
imshow(img);
title('Original Image');
% 统计原图像灰度级像素个数
[pixelCounts, grayLevels] = imhist(img);
% 计算原始直方图
subplot(2,2,2);
bar(grayLevels, pixelCounts);
grid on;
title('Original Histogram');
xlim([0 255]);
% 计算累计直方图
cumHist = cumsum(pixelCounts);
subplot(2,2,3);
bar(grayLevels, cumHist);
grid on;
title('Cumulative Histogram');
xlim([0 255]);
% 进行灰度值变换
T = 150; % 设定阈值 T
imgT = img;
imgT(imgT < T) = 0; % 灰度值小于 T 的像素设为 0
imgT(imgT >= T) = 255; % 灰度值大于等于 T 的像素设为 255
% 显示变换后的图像
subplot(2,2,4);
imshow(imgT);
title('Transformed Image');
% 计算变换后的灰度值
[pixelCountsT, grayLevelsT] = imhist(imgT);
% 计算变换后的直方图
figure;
subplot(2,1,1);
bar(grayLevelsT, pixelCountsT);
grid on;
title('Transformed Histogram');
xlim([0 255]);
% 计算变换后的累计直方图
cumHistT = cumsum(pixelCountsT);
subplot(2,1,2);
bar(grayLevelsT, cumHistT);
grid on;
title('Transformed Cumulative Histogram');
xlim([0 255]);
```
上述程序中,需要将 `your_image.jpg` 替换为您要读入的图像文件名。程序中设定了一个阈值 `T`,将灰度值小于 `T` 的像素设为 0,将灰度值大于等于 `T` 的像素设为 255。您可以根据需要修改阈值 `T` 的值。运行程序后,会弹出两个窗口,第一个窗口中显示原图像、原始直方图、累计直方图和变换后的图像,第二个窗口中显示变换后的直方图和累计直方图。
阅读全文