只要从事与光学相关的研究,无论是镜头设计还是算法开发,都离不开“图像”这一核心概念。从人类在洞穴壁画中记录生活,到今天高分辨率的摄影与视频技术,图像始终是信息表达和记录的关键载体。随着科技的不断进步,图像的表现形式经历了从模拟到数字的重大变革。20世纪初期,胶片摄影的兴起推动了模拟图像技术的蓬勃发展,成为当时记录影像的主流手段。然而,到了20世纪下半叶,随着计算机的普及和数字化工具的发展,数字图像逐渐取代模拟图像,成为现代社会中的主要形式。
本文将围绕“数字图像”的主题展开探讨。首先,我们将解释图像的基本概念,以及数字如何表示图像;接着,通过几个简单的图像处理算法,帮助读者更直观地理解数字图像的工作原理。希望通过本文,能够带领读者深入理解数字图像的重要性,以及其背后的技术驱动力和发展意义。
Part1
图像的概念
图像是一种二维或多维的视觉信息表示形式,它通过将物理世界中的光学信息转换为可视化的形态,传递空间分布的明暗、颜色或其他特征。图像获取与记录的历史贯穿于人类文明的发展历程,从最早的洞穴壁画到现代的数字摄影,经历了以下几个主要阶段。
绘画是最早的图像记录形式,如壁画和书籍插图,通过人工绘制的方式传递信息。这一阶段依赖于人的主观感知,图像表现力受限于绘画技术和材质。17世纪光学系统的发展,如针孔相机和单透镜相机,为图像的获取提供了物理基础。1839年,达盖尔发明的银版摄影术标志着现代摄影的开端。随后,胶片相机成为模拟图像记录的主流工具。可以被视觉感知的物理信息通过相机直接记录在胶片上,胶片经过冲洗即可还原出人眼看到的图像。
20世纪中期,电子设备(如显像管和摄像机)的发展推动了实时图像捕获和显示技术的进步,特别是在电视、医学影像等领域发挥了重要作用。随着计算机技术的崛起,图像的数字化处理和存储成为可能。这一过程为今天的数字图像奠定了基础。
与模拟信号和数字信号一样,所谓数字图像,即用一系列离散的数值去代替物理的图像记录方式(图像就是一种信息)。在数学上,我们可以用一个二维函数来描述图像,其中,
数字图像的产生过程主要包括两个步骤:采样和量化。采样即将连续的光学信号(如光强分布)在空间上离散化,形成有限的采样点。采样点的密度(如分辨率)决定了图像的空间细节(因此探测器像元大小决定了镜头设计需要达到的分辨率要求)。量化即将每个采样点的光学信号值转换为离散的数值表示,通常用二进制编码。量化的精度(如位深)决定了图像的色彩和光强的细腻程度(例如我们常说的动态范围)。通过这两个步骤,数字图像将真实世界的连续光学信号转化为计算机可处理的离散数据。
Part2
图像的数字量化
代码示例
灰度量化:
function outputImg = Glreduce(inputImg, N)
% Glreduce: 将输入图像的灰度级别减少到 N 位
% inputImg: 输入图像路径
% N: 目标量化位数
% 示例: Glreduce('C:\Users\华硕\Pictures\IMG_8600.jpg', 2)
i = imread(inputImg); % 读取图像
f = rgb2gray(i); % 转换为灰度图像
f = uint8(f); % 确保图像数据类型为 uint8
% 检查位数输入是否有效
if N < 1
error('N 必须大于或等于 1');
end
% 计算量化步长
d = double(2^(8 - (N - 1)));
% 灰度量化
ft = (f / d) * d;
% 显示原图与量化后的图像
subplot(1, 2, 1);
imshow(f);
title('原始灰度图');
subplot(1, 2, 2);
imshow(ft);
title(['量化到 ', num2str(N), ' 位的灰度图']);
outputImg = ft; % 输出量化后的图像
end
Part3
一个简单的数字图像处理案例
数字图像处理其实就在我们日常生活中,不知道大家是否用过PS或者其他专业一点的修图软件,在修图的时候,这些软件往往会给我们提供各种工具,例如调整图片的亮度,色温等。同时这些修图软件也会给我们提供直方图作为参考,我们可以在直方图中去判断这张图片的曝光有什么问题。
代码示例
直方图函数:
function H=my_hist(im)
%H=my_hist(im)的输入im为灰度图像(灰度值0-255),输出的H为256维向量
%获取图像尺寸:M=行数,N=列数
[M,N]=size(im);
h=zeros(1,256);
%初始化直方图为256维全0向量
%循环语句实现灰度统计
for i=1:256
for m=1:M
for n=1:N
if im(m,n)==i-1
h(i)=h(i)+1;
end
end
end
end
H=h;
End
测试程序
I=imread('cameraman.tif');
H=my_hist(I);
figure;
subplot(2,1,1);imshow(I),title('灰度图像');
subplot(2,1,2);bar(H),title('直方图');
直方图均衡化:
function im_out= my_histeq(im_in)
%im_out = my_histeq(im_in)输入Im_in与输出im_out为灰度图像
% 灰度值0-255
%my_histeq('cameraman.tif')
%读取图像
I=imread(im_in);
[M,N]=size(I);
number=M*N;
%显示原灰度图像和直方图
figure('NumberTitle', 'on', 'Name', '原灰度图像');
subplot(2,1,1);imshow(I),title('灰度图像');
subplot(2,1,2);imhist(I),title('直方图');
h=zeros(1,256);
h=imhist(I);
%根据累加公式建立灰度映射关系
t=zeros(1,256);
for i=1:256
t(i)=h(i)/number;
end
ts=zeros(1,256);
for j=1:256
for p=1:j
ts(j)=ts(j)+t(p);
end
end
ts=255*ts;
%将原图通过映射变换为新图像
for i=1:M
for j=1:N
I(i,j)=uint8(ts(I(i,j)));
end
end
%输出结果
figure('NumberTitle', 'on', 'Name', '均衡化处理结果')
subplot(2,1,1);imshow(I),title('灰度图像');
subplot(2,1,2);imhist(I),title('直方图');
end
Part4
总结
本文围绕基本概念、物理含义及基本处理技术,直观的解释了数字图像是什么。从图像的定义和历史演进,到灰度量化与直方图分析的具体实现,我们逐步揭示了数字图像处理的核心原理,并通过 MATLAB 案例展示了如何实际应用这些技术来提升图像质量和分析能力。
最后总结一下:数字图像的本质是光学信号的离散化表达,其产生过程包括采样与量化两个关键步骤。通过这两个步骤,我们能够将连续的光学世界转化为计算机可处理的离散数据。希望文中所举的代码和例子能够帮助非计算机背景的读者理解这一日常生活中常见的事物,也希望能帮助各位从事光学领域的读者加深对图像的理解。
最后,还是谢谢各位看到这里。您的点赞、在看、转发就是我更新的动力,如果对您有帮助,可以在下面赞赏作者哦。拜托啦,这对我真的很重要。
对本文中提到的内容有任何疑问或者需要,可以加下方微信交流。
近期其他精彩内容:
END
更多内容请到之晓光学公众号主页
广告/咨询/合作/科研成果推广等,请联系微信号: lgs810975