当前位置:文档之家› 《数字图像处理》复习题(考试)

《数字图像处理》复习题(考试)

《数字图像处理》复习题一、概念1. 简述图形与图像的差别?2. 什么是黑白图像、灰度图像、彩色图像?3. 加大、减小亮度分别会使图像发生怎样的直观变化?4. 加大、减小对比度分别会使图像发生怎样的直观变化?5. 提高、降低饱和度分别会使图像发生怎样的直观变化?6. 在降低一幅图像的对比度时,各像素的颜色值将发生怎样的变化?7. 在提高一幅图像的对比度时,各像素的颜色值将发生怎样的变化?8. 在提高图像的饱和度时,像素中各基色的颜色值将有怎样的变化规律?9. 对图像进行平滑处理的主要目的是什么,通常会带来怎样的负面效果?10. 对图像进行锐化处理所产生的直观效果是什么?二、计算题1. 某位图文件的有关参数为:Width=21,Height=16,求:(1) 每行像素所占字节数WidthBytes;(2) 图像数据的总字节数ImageSize;(3) 第9行第6个像素点数据的偏移地址及红、绿、蓝的地址。

解:(1) WidthBytes=( (int)((21X3+3)/4) ) X 4=( (int)(66/4) ) X 4=16X4=64(2)ImageSize=64X25=1600(3)y=8,x=5数据地址=8X64+5X3=512+15=527B地址:527,G地址:528,R地址:5292. 某像素点的红绿蓝三基色值为(210,70,170),求:(1) 该点的平均亮度值;(2) 该点的饱和度;(3) 大致估算该点的色调值,简述理由(红、绿、蓝三色的色调值分别为0,120,240)解:(1) 亮度L=(210+70+170)/3=150(2) 饱和度S=(210-70)/210=0.667(3) 红色值最大,蓝色值次之,色调值在红蓝之间偏红的位置,即300-360之间,约为320。

3. 将像素点(40,230,90)的亮度降低40%,求处理结果。

解:R=40X(1-0.4)=24G=230X(1-0.4)=138B=90X(1-0.4)=54得:(24,138,54)4. 将图像的对比度提高30%,求像素点(40,230,90)的处理结果。

解:R =127+(40-127)X1.3=127-113.1=13.9=14G =127+(230-127) X1.3=127+134=261>255,则G=255 B =127+(90-127)X1.3=79 得:(14,255,79)5. 给定两个映射点(20,0),(220, 255),求色阶处理的计算公式。

用该公式求像素点(10,160,240)的处理结果。

解:k=255/(220-20)=255/200=1.275b=0-1.275*20=0-25.5= -25.5得计算公式:V=1.275*V'-25.5用该公式对像素点(10,160,240)进行处理 V(10)=1.275*10-25.5=-12.75=0 V(160)=1.275*160-25.5=178.5=179V(240)=1.275*240-25.5=306-25.5=280.5=255 处理结果为:(0, 179, 255)6. 将像素点(130,80,200)的饱和度提高20%,求处理结果。

结果计算式:33121311)()1(2550)2(3V V V H V V S V V SH BV +-=⋅-=≤≤⋅-+=解:V1'=200,V2'=130,V3'=80原饱和度S'=(V1'-V3')/V1'=(200-80)/200=0.6 目标饱和度S =S'X(1+d)=0.6X1.2=0.72 B =V1'+V2'+V3'=130+80+200=410H =(V2'-V3')/(V1'-V3')=(130-80)/(200-80)=0.417 V1=410/(3+(0.417-2)*0.72)=410/(3-1.14)=220=B V3=(1-0.72)X220=62=G V2=0.417X(220-62)+62=128=R 得:(128,62,220)7. 将像素点(120,210,30)的色调加100,求处理结果。

色调计算公式为:⎪⎪⎩⎪⎪⎨⎧=--+=--+=--===),,max()),min(/()(60240),,max()),min(/()(60120),,max()),min(/()(600B G R B G R B G R B G R G B R G R B B G R R B G R B G B G R H色调调整后中间值计算公式为:midV=(60-|H%120-60|)/60*(MaxV-MinV)+minV解:原色调值H'=120+60X(30-120)/(210-30)=90目标色调值H=90+100=190midV=(60-|190%120-60|)/60X(210-30)+30=50/60X180+30=150+180=180基色对应:目标色调值为190,处于蓝绿之间偏蓝的位置,因此蓝最大,绿居中,红最小。

B=maxV=210;G=midV=180;R=minV=30得:(30,180,210)二、图像处理填空将处理结果填入右边的像素阵列中。

1. 对如下灰度图像首先进行水平镜像然后进行垂直镜像:水平+垂直镜像2. 对如下灰度图像进行中值平滑:中值平滑3. 对如下灰度图像进行双向一阶微分边缘检测:边缘检测三、编程及编程填空在各程序中可使用的已预先定义和赋值的全局变量如下:BYTE *ImageData; //已分配内存,存有原图像数据,并用于存放处理后的图像数据int Width, Height; //图像的宽度和高度int WidthBytes; //每行字节数int ImageSize; //图像数据的字节数,已赋值1. 写程序:查表法亮度、对比度、色阶、伽马变换void ModifyLight(float d) //亮度调整函数{int i,v;BYTE colMap[256];for(i=0;i<256;i++){ v=i*(1+d);if( v>255 ) v=255;colMap[i] = v; }for(i=0;i<ImageSize;i++)ImageData[i] = colMap[ ImageData[i] ];}void ModifyContrast(float d) //对比度函数{int i,v;BYTE colMap[256];for(i=0;i<256;i++){ v=127+(i-127)*(1+d);if( v>255) v=255;if( v<0 ) v=0;colMap[i] = v; }for(i=0;i<ImageSize;i++)ImageData[i]= colMap[ImageData[i]];}void ModifyLevels(BYTE I1, BYTE O1, BYTE I2, BYTE O2) //色阶函数{int i,v;float k=float(O2-O1)/(I2-I1);float b=O1-k*I1;BYTE colMap[256];for(i=0;i<256;i++){ v=k*i+b;if( v>255) v=255;if( v<0)v=0;colMap[i] = v; }for(i=0;i<ImageSize;i++)ImageData[i] = colMap[ ImageData[i] ];}void ModifyGamma(float gma) //伽马变换函数{int i;BYTE colMap[256];for(i=0;i<256;i++)colMap[i] = pow((float)i/255,gma)*255;for(i=0;i<ImageSize;i++)ImageData[i]= colMap[ ImageData[i] ];}2. 写程序:饱和度调整主函数设单点饱和度调整函数为void SingleSaturation(BYTE col[],float d)void ModifySaturation(float d){int i,j,k=0;for(i=0;i<Height;i++){ k=i*WidthBytes;for(j=0;j<Width;j++){ SingleSaturation(ImageData+k,d);k+=3; } }}3. 填空:单点色调处理函数void SingleHue(BYTE col[], int d) //单点色调处理函数{int maxV,minV,midV,H;if( col[0]==col[1] && col[1]==col[2]) return;if( col[0]>=col[1] && col[1]>=col[2])H=240+(float)(col[2]-col[1])/(col[0]-col[2])*60,maxV=col[0],minV=col[2];else if( col[0]>=col[2] && col[2]>=col[1])H=240+(float)(col[2]-col[1])/(col[0]-col[1])*60,maxV=col[0],minV=col[1];else if( col[1]>=col[0] && col[0]>=col[2])H=120+(float)(col[0]-col[2])/(col[1]-col[2])*60,maxV=col[1],minV=col2[2];else if( col[1]>=col[2] && col[2]>=col[0])H=120+(float)(col[0]-col[2])/(col[1]-col[0])*60,maxV=col[1],minV=col2[0];else if( col[2]>=col[0] && col[0]>=col[1])H=(float)(col[1]-col[0])/(col[2]-col[1])*60,maxV=col[2],minV=col2[1];else if( col[2]>=col[1] && col[1]>=col[0])H=(float)(col[1]-col[0])/(col[2]-col[0])*60,maxV=col[2],minV=col2[0];H+=d;if(H>=360) H-=360; if(H<0) H+=360;midV=(60-abs(H%120-60))/60*(maxV-minV)+minV;if(H<60) col[2]=maxV, col[1]=midV, col[0]=minV;else if(H<120) col[1]=maxV, col[2]=midV, col[0]=minV;else if(H<180) col[1]=maxV, col[0]=midV, col[2]=minV;else if(H<240) col[0]=maxV, col[1]=midV, col[2]=minV;else if(H<300) col[0]=maxV, col[2]=midV, col[1]=minV;else if(H<360) col[2]=maxV, col[0]=midV, col[1]=minV; }。

相关主题