读入一幅图像,利用三折线变换方法,编程实现图像增强。同屏显示变换函数曲线、 原图像、处理后的图像和两幅图像的直方图。 matlab实现
时间: 2024-05-09 14:15:44 浏览: 223
浅谈图像增强的直方图处理及其MATLAB实现
以下是用 MATLAB 实现三折线变换方法的图像增强代码:
```matlab
% 读入图像
img = imread('input.png');
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 计算图像直方图
hist_gray = imhist(gray_img);
% 计算累计分布函数
cdf = cumsum(hist_gray) / numel(gray_img);
% 计算三折线变换函数
r1 = 0.25;
r2 = 0.75;
s1 = 0.1;
s2 = 0.9;
x1 = 0 : round(r1 * 255);
y1 = s1 / r1 * x1;
x2 = round(r1 * 255) + 1 : round(r2 * 255);
y2 = (s2 - s1) / (r2 - r1) * (x2 - round(r1 * 255)) + s1;
x3 = round(r2 * 255) + 1 : 255;
y3 = (1 - s2) / (1 - r2) * (x3 - round(r2 * 255)) + s2;
% 绘制变换函数曲线
figure;
plot(0 : 255, cdf, 'b', x1, y1, 'r', x2, y2, 'r', x3, y3, 'r');
axis([0 255 0 1]);
xlabel('Input Intensity');
ylabel('Output Intensity');
% 进行三折线变换
enhanced_img = zeros(size(gray_img));
for i = 1 : numel(gray_img)
intensity = gray_img(i) + 1;
enhanced_intensity = round(interp1([0 x1 x2 x3 255], [0 y1 y2 y3 1], intensity, 'linear', 'extrap') * 255);
enhanced_img(i) = enhanced_intensity;
end
% 显示原图像、处理后的图像和两幅图像的直方图
figure;
subplot(2, 2, 1);
imshow(gray_img);
title('Original Image');
subplot(2, 2, 2);
imshow(enhanced_img);
title('Enhanced Image');
subplot(2, 2, 3);
imhist(gray_img);
title('Histogram of Original Image');
subplot(2, 2, 4);
imhist(enhanced_img);
title('Histogram of Enhanced Image');
```
需要注意的是,这段代码中的三折线变换函数是根据一组固定的参数进行计算的。如果需要进行不同的增强操作,需要根据具体情况重新计算三折线变换函数的参数。
阅读全文