- 实验内容
- 任意选取一副图像,应用线性和非线性点运算,调整灰度的图像细节更容易看清,显示灰度变换前后的图像。
- 任意选择一副灰度图像,实现图像的直方图均衡。显示原始图片,原始直方图分布,直方图均衡后图像及直方图分布。
- 源程序和结果
(1) 任意选取一副图像,应用线性和非线性点运算,调整灰度的图像细节更容 易看清,显示灰度变换前后的图像。
%将界面上的内容全部清空
clc;
clear;
close all;
I1=imread('D:\matl\1\i_building.jpg');%将磁盘存放的图片读入程序
I1=rgb2gray(I1);%将彩色图像转化成灰度图像
figure(1)
imshow(I1),title('原图');
I=I1;
s1=I1+20;
s2=2*I1+20;
s3=0.5*I1+20;
%伽马运算和线性运算
figure(2);
%Gamma取0.75
subplot(2,3,1);imshow(imadjust(I,[],[],0.75));title('Gamma 0.75');
%Gamma取1
subplot(2,3,2);imshow(imadjust(I,[],[],1));title('Gamma 1')
%Gamma取1.5
subplot(2,3,3);imshow(imadjust(I,[],[],1.5));title('Gamma 1.5');
%a=1,b=20
subplot(2,3,4);imshow(s1);title('a=1,b=20');
%a=2,b=20
subplot(2,3,5);imshow(s2);title('a=2,b=20');
%a=0.5,b=20
subplot(2,3,6);imshow(s3);title('a=0.5,b=20');
(2)任意选择一副灰度图像,实现图像的直方图均衡。显示原始图片,原始直方图分布,直方图均衡后图像及直方图分布。
% 读取原图
R =I1;
[row, col] = size(R);%row是R的行数,col是R的列数
figure(3);
% 显示原图和原图对应的直方图
subplot(2,2,1), imshow(R), title('原灰度图');
subplot(2,2,2), imhist(R), title('原灰度图的直方图');
% 计算PMF,即统计各灰度值的像素数量
PMF = zeros(1, 256); %注意MATLAB的数组索引从1开始
for i = 1:row
for j = 1:col
PMF(R(i,j) + 1) = PMF(R(i,j) + 1) + 1; % R(i,j)为像素的灰度值
end
end
PMF = PMF / (row * col);
% 计算CDF
CDF = zeros(1,256);
CDF(1) = PMF(1);
for i = 2:256
CDF(i) = CDF(i - 1) + PMF(i);
end
% 计算均衡后的像素值
Sk = zeros(1,256);
for i = 1:256
Sk(i) = CDF(i) * 255;
end
% 映射到新的像素值
Sk = round(Sk);
for i = 1:row
for j = 1:col
R(i,j) = Sk(R(i,j) + 1);
end
end
% 绘制直方图均衡后的图像
subplot(2,2,3), imshow(R), title('直方图均衡');
subplot(2,2,4), imhist(R), title('均衡后的直方图');