1.问答题
1.1连续图像f(x.y)和数字图像I(r,c)中各分量的含义是什么?他们有什么联系和区别?取值范围在什么范围?
答:f(x,y)表示二维图像在空间XY中一个坐标点的位置(实际图像的尺寸是有限的,所以x和y的取值也是有限的),即f(x,y)中的x,y分别代表一个点连续图像中的x轴和y轴的坐标,而f则代表图像在点(x,y)的某种性质F的数值(实际图像中各个位置上所具有的性质F的取值也是有限的,所以F得取值也是有限的)。F,x,y的值可以是任意实数。图像在点(x,y)也可以有多重性质,此时可用矢量f来表示。
数字图像I(r,c)表示位于图像矩阵上第r行,第c列的元素幅值。其中I,c,r的值都是整数。I(r,c)是通过对f(x,y)抽样和量化得来的,f(x,y)各量是连续的,I(r,c)各量是离散的,这里的I代表离散化后的f,(r,c)代表离散化后的(x,y),r,c分别有连续图像中的x,y分别采样得到的;x,y可以取所有的非负数,r,c可以取所有的非负整数。
1.2 发光强度及亮度、照度各有什么不同?
答:1)发光强度,单位坎德拉,即cd。
定义:光源在给定方向的单位立体角中发射的光通量定义为光源在该方向的发光强度。
解释:发光强度是针对点光源而言的,或者发光体的大小与照射距离相比比较小的场合。这个量是表明发光体在空间发射的会聚能力的。可以说,发光强度就是描述了光源到底有多“亮”,因为它是光功率与会聚能力的一个共同的描述。发光强度越大,光源看起来就越亮,同时在相同条件下被该光源照射后的物体也就越亮,因此,早些时候描述手电都用这个参数。
常见光源发光强度:太阳,2.8E27cd,高亮手电,10000cd,5mm超高亮LED,15cd。
2)亮度,单位尼特,即nt。
定义:单位光源面积在法线方向上,单位立体角内所发出的光流。
解释:这个是最容易被误解的概念了。亮度是针对光源而言,而且不是对点光源,是对面光源而言的。无论是主动发光的还是被动(反射)发光的。亮度是一块比较小的面积看起来到底有多“亮”的意思。这个多“亮”,与取多少面积无关,但为了均匀,我们把面积取得比较小,因此才会出现“这一点的亮度”这样的说法。亮度不仅取决于光源的光通量,更取决于等价发光面积和发射的会聚程度。比如激光指示器,尽管其功率很小,但可会聚程度非常高,因此亮度非常高。
常见发光体的亮度:红色激光指示器,20,000,000,000nt,太阳表面,2,000,000,000nt,白炽灯灯丝,10,000,000nt,阳光下的白纸,30,000nt,人眼能习惯的亮度,3,000nt,满月表面,2,500nt。
3)光照度,单位勒克斯,即lx。
定义:流明的光通量均匀分布在1平方米表面上所产生的光照度。
解释:光照度是对被照地点而言的,但又与被照射物体无关。一个流明的光,均匀射到1平方米的物体上,照度就是1 lx。照度的测量,用照度表,或者叫勒克斯表、lux表。
常见照度:阳光直射(正午)下,110,000 lx,阴天室外,1000 lx,商场内,500 lx,阴天有窗室内,100 lx,普通房间灯光下,100 lx,满月照射下,0.2 lx。
1.3试讨论连续卷积和离散卷积的不同。
答:1.连续时间信号卷积;
2.离散时间信号卷积
连续时间信号卷积
function [f,k]=sconv(f1,f2,k1,k2,p)
f1=0.5*(0:0.01:2);f2=0.5*(0:0.01:2);
k1=0:0.01:2;k2=0:0.01:2;p=0.01;
f=conv(f1,f2);
f=f*p;
k0=k1(1)+k2(1); k3=length(f1)+length(f2)-2;
k=k0:p:k0+k3*p; subplot(3,3,1)
plot(k1,f1) title('f1(t)')
xlabel('t')
ylabel('f1(t)')
subplot(3,3,4)
plot(k2,f2) title('f2(t)')
xlabel('t')
ylabel('f2(t)')
subplot(3,3,7)
plot(k,f); h=get(gca,'position');
h(3)=2.5*h(3);
set(gca,'position',h)
title('f(t)=f1(t)*f2(t)')
xlabel('t')
离散时间信号卷积
function [f,k]=dconv(f1,f2,k1,k2)
f1=[1,2,1];f2=ones(1,5);k1=[-1 0 1];k2=-2:2;
f=conv(f1,f2)
k0=k1(1)+k2(1);
k3=length(f1)+length(f2)-2;
k=k0:k0+k3
subplot(3,3,1)
stem(k1,f1)
title('f1(n)')
xlabel('n')
ylabel('f1(n)')
subplot(3,3,4)
stem(k2,f2)
title('f2(n)')
xlabel('n')
ylabel('f2(n)')
subplot(3,3,7)
stem(k,f)
title('f1(n)与f2(n)的卷积和f(n)')
xlabel('n')
ylabel('f(n)')
h=get(gca,'position');
h(3)=2.5*h(3);
set(gca,'position',h)
1.4 为什么一般情况下对离散图像的直方图均衡化并不能产生完全平坦的直方图?
答:直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。由于离散图象的直方图也是离散的,其灰度的累积分布函数是一个不减的阶梯函数。如果映射后的图象仍能取到所有256级灰度,那一定是原图象没有任何改变,这种情况只可能发生在原图象的直方图已经是一条水平线的情况下。一般情况下映射后所得到的图象只能取到少于256级灰度,这样在变换后的直方图中会有某些灰度级空缺,当然这些空缺应该均匀分布在0到255之间。于是问题就变成了将原有的256个值,即各灰度的概率,按顺序分成n(n<256)份,每份的概率总和应该相等。显然这个问题是不一定有解的,因此我们只能找到一个近似解。其结果就是最后得到一幅有空缺且不太平坦的直方图。
1.5 讨论用于空间滤波的平滑滤波器和锐化滤波器的相同点、不同点和联系。
答:相同点:都能减弱或消除傅里叶空间的某些分量,而不影响或较少影响其他分量,从而达到增强某些频率分量的效果。
不同点:频率滤波器减弱或消除了傅里叶空间的高频分量,所以达到了增强某些低频分量、平滑图像中细节的效果。锐化滤波器减弱或消除傅里叶空间的低频分量,所以达到了增强了高频分量、锐化图像中细节效果。
联系:两者效果相反,互为补充,从原始图像中减去平滑滤波器的结果得到锐化滤波器的效果,而从原始图像中减去锐化滤波器的结果则可以得到平滑滤波器的效果。
1.6 参考教材公式(11.2.1),如果对数底数不为2,当对数底数为e时,得到的信息单位为奈特(nat),当底数为10时,得到的信息单位成为哈特利(Hartley),推导他们与比特的换算关系。
答:1bit = -log2P(E)
1nat = -lnP(E)= -log2P(E)/ log2 e = -log2e(bit)
1hartley = -lgP(E)= -log2P(E)/ log2 10 = -log210(bit)
2.编程题
2.1 编程实现教材第11章习题11-13和11-16题。
答:
11-13
解码:
function [output,table] = norm2lzw(vector)
if ~isa(vector,'uint8'),
error('input argument must be a uint8 vector')
end
vector = uint16(vector(:)');
table = cell(1,256);
for index = 1:256,
table{index} = uint16(index-1);
end
output = vector;
outputindex = 1;
startindex = 1;
for index=2:length(vector),
element = vector(index);
substr = vector(startindex:(index-1));
code = getcodefor([substr element],table);
if isempty(code),
output(outputindex) = getcodefor(substr,table);
[table,code] = addcode(table,[substr element]);
outputindex = outputindex+1;
startindex = index;
else,
end
end
substr = vector(startindex:index);
output(outputindex) = getcodefor(substr,table);
output((outputindex+1):end) = [];
function code = getcodefor(substr,table)
code = uint16([]);
if length(substr)==1,
code = substr;
else,
for index=257:length(table),
if isequal(substr,table{index}),
code = uint16(index-1);
break
end
end
end
function [table,code] = addcode(table,substr)
code = length(table)+1;
table{code} = substr;
code = uint16(code-1);
解码:
function [output,table] = lzw2norm(vector)
if ~isa(vector,'uint16'),
error('input argument must be a uint16 vector')
end
vector = vector(:)';
table = cell(1,256);
for index = 1:256,
table{index} = uint16(index-1);
end
output = uint8([]);
code = vector(1);
output(end+1) = code;
character = code;
for index=2:length(vector),
element = vector(index);
if (double(element)+1)>length(table),
string = table{double(code)+1};
string = [string character];
else,
string = table{double(element)+1};
end
output = [output string];
character = string(1);
[table,code] = addcode(table,[table{double(code)+1} character]);
code = element;
end
function code = getcodefor(substr,table)
code = uint16([]);
if length(substr)==1,
code = substr;
else,
for index=257:length(table),
if isequal(substr,table{index}),
code = uint16(index-1);
break
end
end
end
function [table,code] = addcode(table,substr)
code = length(table)+1; % start from 1
table{code} = substr;
code = uint16(code-1); % start from 0
演示程序:
str = '0 0 128 128; 0 0 255 255; 0 0 255 255; 0 0 255 255';
[packed,table]=norm2lzw(uint8(str));
[unpacked,table]=lzw2norm(packed);
unpacked = char(unpacked);
isOK = strcmp(str,unpacked)
strvcat(table{257:end})
11-16 给定信源符号集A={a1,a2,a3,a4,a5,a6},且以知u=[0.15 0.4 0.1 0.1 0.05 0.2]^T,进行哈夫曼编码,并给出码字、平均比特数和编码效率。
答:码字:依次为:101,0,110,1110,1111,100 。平均比特数为2.35 。编码效率为97%。
2.2 对“Fig0419(a)(chestXray_original).tif”的胸透图像进行空域、频域或混合方法增强,写出源代码并进行逐行注释,用两种以上的方法。
答:
1、利用灰度调整函数变换图像
A=imread('Fig0419(a)(chestXray_original).tif'); %读入图像
B=imadjust(A,[0.1,0.8],[0,1]); %灰度调整
imwrite(B,'E:\\ 1.tif'); %图像保存
subplot(2,2,1);imshow(A); %显示调整前后图像及其直方图
subplot(2,2,2);imhist(A);
subplot(2,2,3);imshow(B);
subplot(2,2,4);imhist(B);
2、低通频域滤波
file=fopen(' Fig0419(a)(chestXray_original).tif ');
lena=fread(file,[256,256], 'uint8');
F=fft2(lena);
F1=fftshift(F);
F1temp=log(F1+1);
mesh(0:255,0:255,abs(F1));
figure;
r = 88; %另取24、11、5
m=256;n=256;
for i=1:m
for j=1:n
if (((i-m/2)^2+(j-n/2)^2) < r^2 )
mask(i,j) = 1;
else
mask(i,j) = 0;
end
end
end
F2=F1.*mask;
F2temp=log(F2+1);
mesh(1:256,1:256,abs(F2))下载本文