实验一:图像信号的数字化
一. 实验目的
(1) 通过本实验了解图像的数字化过程,了解数字图像的数据矩阵表示法。
(2) 掌握取样(象素个数)、量化与图像质量的关系。
二. 实验原理
三. 实验内容
(1) 选取任意一副灰度图像,imread进行读取,显示其像素值阵列。
(2) 实现图像的缩小,观察图像采样的像素数对图像质量的影响,观察“棋盘格”现象。
(3) 使用灰度分割减小灰度级来显示同一幅图像,二值图显示图像,观察图像量化对图像质量的影响,观察“伪轮廓”现象。
四. 源程序及结果
五. 结果分析
实验二:图像灰度修正
一. 实验目的
(1) 掌握常用的图像灰度级修正方法,包括图象的线性和非线性灰度点运算和直方图均衡化法,加深对灰度直方图的理解。
(2) 掌握对比度增强、直方图增强的原理,方法。
二. 实验原理
三. 实验内容
(1) 任意选取一副图像,应用线性和非线性点运算,调整灰度的图像细节更容易看清,显示灰度变换前后的图像。
(2) 任意选择一副灰度图像,实现图像的直方图均衡。显示原始图片,原始直方图分布,直方图均衡后图像及直方图分布。
四. 源程序和结果
五. 结果分析
代码:
%将界面上的内容全部清空
clc;
clear;
close all;
I1=imread('F:\ClassPrograms\image\ex12\lena.bmp');%将磁盘存放的图片读入程序
I1=rgb2gray(I1);
figure(1)
imshow(I1),title('原图');
I2=I1(1:2:end,1:2:end);%每2位采集1位,256/2=128
I3=I1(1:4:end,1:4:end);%每4位采集1位.256/4=64
I4=I1(1:8:end,1:8:end);%每8位采集1位,256/8=32
I5=I1(1:16:end,1:16:end);%每16位采集1位,256/16=16
I6=I1(1:32:end,1:32:end);%每32位采集1位,256/32=8
%显示图片,采样
figure(2);
subplot(2,3,1),imshow(I1),title('采样256X256');
subplot(2,3,2),imshow(I2),title('采样128X128');
subplot(2,3,3),imshow(I3),title('采样64X64');
subplot(2,3,4),imshow(I4),title('采样32X32');
subplot(2,3,5),imshow(I5),title('采样16X16');
subplot(2,3,6),imshow(I6),title('采样8X8');
t1=I1
t2=histeq(t1,256)
t3=histeq(t1,128)
t4=histeq(t1,64)
t5=histeq(t1,32)
t6=histeq(t1,16)
t7=histeq(t1,2)
%量化
figure(3);
subplot(2,3,1),imshow(t2),title('量化级为256')
subplot(2,3,2),imshow(t3),title('量化级为128')
subplot(2,3,3),imshow(t4),title('量化级为64')
subplot(2,3,4),imshow(t5),title('量化级为32')
subplot(2,3,5),imshow(t6),title('量化级为16')
subplot(2,3,6),imshow(t7),title('量化级为2')%二值图
I=I1;
s1=I1+20;
s2=2*I1+20;
s3=0.5*I1+20;
s4=255-1*I1;%要注意!!!
s5=-1*I1+255;%要注意!!!
%伽马运算和线性运算
figure(4);
%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(imadjust(I,[],[],0.75));title('a=1,b=20');
%a=2,b=20
subplot(2,3,5);imshow(imadjust(I,[],[],1));title('a=2,b=20');
%a=0.5,b=20
subplot(2,3,6);imshow(imadjust(I,[],[],1.5));title('a=0.5,b=20');
figure(5);
%a=-1,b=255
subplot(1,2,1);imshow(s4);title('a=-1,b=255');
subplot(1,2,2);imshow(s5);title('a=-1,b=255');
% 读取原图
R =I1;
[row, col] = size(R);
figure(6);
% 显示原图和原图对应的直方图
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('均衡后的直方图');