数字图像处理试题库doc.docx

上传人:b****0 文档编号:17177089 上传时间:2023-07-22 格式:DOCX 页数:47 大小:266.64KB
下载 相关 举报
数字图像处理试题库doc.docx_第1页
第1页 / 共47页
数字图像处理试题库doc.docx_第2页
第2页 / 共47页
数字图像处理试题库doc.docx_第3页
第3页 / 共47页
数字图像处理试题库doc.docx_第4页
第4页 / 共47页
数字图像处理试题库doc.docx_第5页
第5页 / 共47页
数字图像处理试题库doc.docx_第6页
第6页 / 共47页
数字图像处理试题库doc.docx_第7页
第7页 / 共47页
数字图像处理试题库doc.docx_第8页
第8页 / 共47页
数字图像处理试题库doc.docx_第9页
第9页 / 共47页
数字图像处理试题库doc.docx_第10页
第10页 / 共47页
数字图像处理试题库doc.docx_第11页
第11页 / 共47页
数字图像处理试题库doc.docx_第12页
第12页 / 共47页
数字图像处理试题库doc.docx_第13页
第13页 / 共47页
数字图像处理试题库doc.docx_第14页
第14页 / 共47页
数字图像处理试题库doc.docx_第15页
第15页 / 共47页
数字图像处理试题库doc.docx_第16页
第16页 / 共47页
数字图像处理试题库doc.docx_第17页
第17页 / 共47页
数字图像处理试题库doc.docx_第18页
第18页 / 共47页
数字图像处理试题库doc.docx_第19页
第19页 / 共47页
数字图像处理试题库doc.docx_第20页
第20页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数字图像处理试题库doc.docx

《数字图像处理试题库doc.docx》由会员分享,可在线阅读,更多相关《数字图像处理试题库doc.docx(47页珍藏版)》请在冰点文库上搜索。

数字图像处理试题库doc.docx

数字图像处理试题库doc

试题库

一、填空题:

1.彩色图像的灰度化处理,将真彩色图像转化成256色灰度图像。

要求:

转换关系为:

Gray(i,j)=0.11R(i,j)+0.59G(i,j)+0.3B(i,j)

(1)获取原图像像素的首地址,及图像的高度和宽度;

(2)得到像素的蓝、绿、红的三个分值;

(3)按照公式要求,计算Gray(i,j);

(4)将该值返回给蓝、绿、红三个分量。

voidMakeColorDib:

:

MakegGray()

{

BYTE*p_data;

intwide,height,DibWidth;

p_data=this->GetData();

wide=this->GetWidth();

height=this->GetHeight();

DibWidth=this->GetDibWidthBytes();

for(intj=0;j

for(inti=0;i

{

BYTE*pbyBlue=p_data++;//得到蓝色值

BYTE*pbyGreen=p_data++;//得到绿色值

BYTE*pbyRed=p_data++;//得到红色值

BYTEr=*pbyRed;

BYTEg=*pbyGreen;

BYTEb=*pbyBlue;

gray=0.11*r+0.59*g+0.3*b

*pbyBlue=gray;//将取到的最大值赋给像素的蓝分量

*pbyGreen=gray;//将取到的最大值赋给像素的绿分量

*pbyRed=gray;//将取到的最大值赋给像素的红分量

}

for(intj=height/3;j<2*height/3;j++)//每行

for(inti=0;i

{

inta=*p_data;//取得当前点的值

*p_data=255-a;//取反

p_data++;//指向下一指针

}

for(intj=2*height/3;j

for(inti=0;i

{

BYTE*pbydata=p_data++;//取得当前点的值

BYTEa=*pbydata;//传给临时变量

*pbydata=(a>128)?

a:

(255-a);//调整

}

}

2.目标物体的轮廓提取。

要求:

(1)获取原图像像素的首地址,及图像的高和宽;

(2)开辟一块内存缓冲区,存储处理后的图像像素;

(3)计算图像的平均灰度值,以平均灰度值作为阈值T;

(4)对图像进行二值化预处理,像素灰度值大于T的置白,否则置黑;

(5)将像素点的8邻域像素读入数组中,如果8个邻域像素都和中心点相同,在内存缓

区将该像素点置白,否则保持不变;

(6)重复执行(3),对每一个像素进行处理;

(7)将处理后的图像数据复制到原图像中。

voidBingXingBianJieDib:

:

Lunkuotiqu()

{

LPBYTEp_data,lpSrc;

intwide,height;

inti,j;

intn1,n2,n3,n4,n5,n6,n7,n8;

lpSrc=this->GetData();

p_data=lpSrc;

wide=this->GetWidth();

height=this->GetHeight();

//计算图像的平均灰度值T,再进行二值化预处理,像素灰度值大于T的置白,否则置黑。

for(j=0;j

{

for(i=0;i

{

if(*p_data>128)

*p_data=255;

else

*p_data=0;

p_data++;

}

}

p_data=lpSrc;

LPBYTEtemp=newBYTE[wide*height];

memset(temp,255,sizeof(temp));

for(j=1;j

for(i=1;i

{

if(p_data[j*wide+i]==0)

{

temp[j*wide+i]=0;

n1=p_data[(j+1)*wide+i-1];

n2=p_data[(j+1)*wide+i];

n3=p_data[(j+1)*wide+i+1];

n4=p_data[j*wide+i-1];

n5=p_data[j*wide+i+1];

n6=p_data[(j-1)*wide+i-1];

n7=p_data[(j-1)*wide+i];

n8=p_data[(j-1)*wide+i+1];

//如果相邻的八个点都是黑点

if(n1+n2+n3+n4+n5+n6+n7+n8==0)

temp[j*wide+i]=255;

}

}

memcpy(lpSrc,temp,wide*height);

deletetemp;

}

3.编程实现分别统计24位真彩色图像R、G、B直方图。

要求:

本程序功能是对24位真彩色图像的R、G、B分别进行直方图统计,R、G、B分布密度分别放在数组tongji_RED[],tongji_GREEN[],tongji_BLUE[]里。

请将程序代码补充完整。

voidHuiDuBianHuanDib:

:

ZhiFangTu(float*tongji_RED,float*tongji_GREEN,float*tongji_BLUE)

{

inti,j;

intwide,height;

LPBYTEp_data;

p_data=this->GetData();

height=this->GetHeight();

wide=this->GetWidth();

}

4.根据结构

编程实现图像的闭运算。

要求:

(1)得原图像的首地址及图像的宽和高。

(图像已经二值化,背景为白,物体为黑)。

(2)辟一块内存缓冲区,并初始化为255。

(3)定义一个结构数组B[9]。

B[9]=

(4)为防越界,不处理最左边、最右边、最上边和最下边四边的像素,从第2行第2列开始进行闭运算。

(5)循环步骤4,直到处理完原图的全部像素点。

(6)将结果从内存复制到原图的数据区。

voidFuShiYuPengZhangDib:

:

Onfushi()

{

inti,j,m,n;

LPBYTEp_data;

LPBYTElpSrc;

LPBYTElpDst;

LPBYTEtemp;

p_data=GetData();

LONGwide=GetWidth();

LONGheight=GetHeight();

temp=newBYTE[wide*height];

lpDst=(LPBYTE)temp;

memset(lpDst,(BYTE)255,wide*height);

//3×3的结构元素

intB[9]={1,0,1,

0,0,0,

1,0,1};

//使用全方向的结构元素进行腐蚀

for(j=1;j

for(i=1;i

{

//由于使用3×3的结构元素,为防止越界,所以不处理最左、右、上、下四//边的像素

//指向源图像倒数第j行,第i个象素的指针

lpSrc=(unsignedchar*)(p_data+wide*j+i);

//指向目标图像倒数第j行,第i个象素的指针

lpDst=(unsignedchar*)(temp+wide*j+i);

//目标图像中的当前点先赋成黑色

*lpDst=0;

//如果源图像中3×3结构元素对应位置有白点

//则将目标图像中的(0,0)点赋成白色

for(m=0;m<3;m++)

for(n=0;n<3;n++)

{

if(B[m+n]==1)

continue;

if(*(lpSrc+(1-m)*wide+(n-1))>128)

{

*lpDst=255;

break;

}

}

}

memcpy(p_data,temp,wide*height);

deletetemp;

}

5.编程实现图像的渐隐。

要求:

显示一幅位图,像素浓度由亮到暗,逐渐减弱,直至全黑。

请写出渐隐的程序代码。

voidCDynSplitView2:

:

OnJianyin()

{

CDC*pDC=GetDC();

CRectrect(0,0,1000,1000);

CBrushbrush(RGB(255,255,255));

pDC->FillRect(&rect,&brush);

clearmem();

CDSplitDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

if(!

pDoc->statedoc&&state2==1)

{

BYTE*pBitmapData=CDibNew1->GetData();

LPBITMAPINFOpBitmapInfo=CDibNew1->GetInfo();

intbitmapHeight=CDibNew1->GetHeight();

intbitmapWidth=CDibNew1->GetWidth();

if(CDibNew1->GetRGB())//Hasacolortable

{

CPalette*hPalette=CreateBitmapPalette(CDibNew1);

CPalette*hOldPalette=pDC->SelectPalette(hPalette,true);

pDC->RealizePalette();

LPBYTEtemp,temp1,temp2;

temp=newBYTE[CDibNew1->GetHeight()*CDibNew1->GetHeight()];

memset(temp,0,CDibNew1->GetHeight()*CDibNew1->GetHeight());

for(intn=0;n<=256;n++)

{

temp1=temp

temp2=pBitmapData

for(intj=0;j

{

for(inti=0;i

{

*temp1=(*temp2)*n/256;

temp1++;

temp2++;

}

}

//显示图像

:

:

StretchDIBits(pDC->GetSafeHdc(),0,0,bitmapWidth,bitmapHeight,

0,0,bitmapWidth,bitmapHeight,temp,pBitmapInfo,

DIB_RGB_COLORS,SRCCOPY);

Sleep(0.0005);

}

pDC->SelectPalette(hOldPalette,true);

:

:

DeleteObject(hPalette);

deletetemp;

}

}

}

6.对灰度图像进行N×N十字型中值滤波处理。

要求:

(1)取得图像大小、数据区,并把数据区复制到缓冲区中;

(2)取得N值;

(3)循环取得各点像素值;

(4)对以该点为中心的N*N十字型屏蔽窗口包括的各像素值进行排序,得到中间值;

(5)把该点像素值置为中间值;

(6)把缓冲区中改动的数据复制到原数据区中。

voidZaoShengXiaoChuDib:

:

nnzhong(intn)

{

DWORDsize;

size=GetSize();

BYTE*p_temp=newBYTE[size];

memset(p_temp,255,size);

intyy,xx,n2,nn,chuo,chg,m,medi,madom,mado[1000];

BYTE*p_data;

intwide,height;

if(n<3||n%2!

=1)

AfxMessageBox("请输入一个大于等于3的奇数");

if(n>=3&&n%2==1)

n2=(n-1)/2;

nn=n*n;chuo=(nn-1)/2;

p_data=this->GetData();

wide=this->GetWidth();

height=this->GetHeight();

for(intj=n2;j

for(inti=n2;i

{

m=0;

for(yy=j-n2;yy<=j+n2;yy++)

{

mado[m]=p_data[yy*wide+i];

m++;

}

for(xx=i-n2;xx<=i+n2;xx++)

{

if(xx==i)continue;

mado[m]=p_data[j*wide+xx];

m++;

}

}

//把mado[m]中的值按下降顺序用冒泡法排序

do{

chg=0

for(m=0;m

{

if(mado[m]

{

madom=mado[m];

mado[m]=mado[m+1];

mado[m+1]=madom;

chg=1;

}

}

}while(chg==1);

medi=mado[chuo];

p_temp[j*wide+i]=medi;

}

memcpy(p_data,p_temp,size);

deletep_temp;

}

7.编程实现灰度图像的伪彩色处理。

要求:

修改颜色索引表,将灰度图像显示成彩色图像。

将灰度区间表示成如下5种典型的颜色:

[0,50]表示成:

黑色;[51,100]表示成:

蓝色;

[101,150]表示成:

红色;[151,200]表示成:

黄色;

[201,255]表示成:

绿色。

CPalette*CDynSplitView2:

:

CreateBitmapPalette(CDib*pBitmap)

{

struct

{

WORDVersion;

WORDNumberOfEntries;

PALETTEENTRYaEntries[256];

}palette={0x300,256};

LPRGBQUADpRGBTable=pBitmap->GetRGB();

UINTnumberOfColors=pBitmap->GetNumberOfColors();

for(UINTx=0;x

{

//请修改颜色表

if((x>0)&&(x<50))

if((x>51)&&(x<100))

if((x>101)&&(x<150))

if((x>151)&&(x<200))

if((x>201)&&(x<255))

palette.aEntries[x].peRed=pRGBTable[x].rgbRed;

palette.aEntries[x].peGreen=pRGBTable[x].rgbGreen;

palette.aEntries[x].peBlue=pRGBTable[x].rgbBlue;

palette.aEntries[x].peFlags=0;

}

//hPalette已在视类定义

hPalette.CreatePalette((LPLOGPALETTE)&palette);

return&hPalette;

}

8.中值滤波是指将当前像元的窗口(或领域)中所有像元灰度由小到大进行排序,中间值作为当前像元的输出值,试编程实现3×3中值滤波。

原始图像的部分数据为:

LPBYTEp_data;

p_data=GetData();

LONGwide=GetWidth();

LONGheight=GetHeight();

答:

intm;

for(intj=1;j

for(inti=1;i

{

for(intyy=j-1;yy<=j+1;yy++)

for(intxx=i-1;xx<=i+1;xx++)

{

intmado[m]=p_data[yy*wide+xx];

m++;

}

do

{

intchg=0;

for(m=0;m<8;m++)

{

if(mado[m]

{

intmadom=mado[m];

mado[m]=mado[m+1];

mado[m+1]=madom;

chg=1;

}

}

}while(chg==1)

intmedi=mado[4];

p_data[j*wide+i]=medi;

}

9.完成对一幅宽为wide,高为height的灰度图像进行垂直镜像变换的程序。

原始图像的部分数据为:

LPBYTElpSrc;//指向源图像的指针

LPBYTEp_data;//指向要复制区域的指针

LPBYTElpDst;//指向复制图像的指针

longheight=this->GetHeight();//图像的高与宽

longwide=this->GetWidth();

p_data=this->GetData();

答:

LPBYTEtemp;

LONGi;//循环变量

LONGj;

temp=newBYTE[wide*height];//暂时分配内存,以保存一行图像

//针对上半图像进行操作

for(i=0;i

{

for(j=0;j

{

lpSrc=(LPBYTE)p_data+wide*j+i;

lpDst=(LPBYTE)temp+wide*(height-j-1)+i;

*lpDst=*lpSrc;

}

}

memcpy(p_data,temp,wide*height);

//释放内存

deletetemp;

10.将图像中的红色球体进行左右、上下、对称复制。

原图处理后的图像

voidTuXianFuZhiDib:

:

Onfuzhi()

{

LPBYTEp_data;

p_data=GetData();

LONGwide=GetWidth();

LONGheight=GetHeight();

}

11.编程实现24位彩色图像进行处理。

要求:

将24位彩色图像平均分成三个等高的区域,对这三个区域分别进行灰度化处理、逆反处理、曝光处理。

(1)对第一个区域进行灰度变换。

Gray(i,j)=0.11R(i,j)+0.59G(i,j)+0.3B(i,j)

(2)对第二个区域进行逆反处理。

(3)对第三个区域进行曝光处理。

voidMakeColorDib:

:

MakegChange()

{

BYTE*p_data;

intwide,height,DibWidth;

p_data=this->GetData();

wide=this->GetWidth();

height=this->GetHeight();

DibWidth=this->GetDibWidthBytes();

for(intj=0;j

for(inti=0;i<;)

{

BYTE*pbyBlue=p_data++;//得到蓝色值

BYTE*pbyGreen=p_data++;//得到绿色值

BYTE*pbyRed=p_data++;//得到红色值

BYTEr=*pbyRed;

BYTEg=*pbyGreen;

BYTEb=*pbyBlue;

gray=0.11*r+0.59*g+0.3*b

*pbyBlue=gray;//将取到的最大值赋给像素的蓝分量

*pbyGreen=gray;//将取到的最大值赋给像素的绿分量

*pbyRed=gray;//将取到的最大值赋给像素的红分量

}

for(intj=height/3;j<2*height/3;j++)//每行

for(inti=0;i

{

inta=*p_data;//取得当前点的值

*p_data=255-a;//取反

p_data++;//指向下一指针

}

for(intj=2*height/3;j

for(inti=0;i

{

BYTE*pbydata=p_data++;//取得当前点的值

BYTEa=*pbydata;//传给临时变量

*pbydata=(a>128)?

a:

(255-a);//调整

}

}

12.彩色图像RGB颜色模型转换为YUV颜色模型。

YUV颜色模式,这是电视系统中常用的颜色模式,即电视中所谓的分量(Component)信号。

该模式1个亮度信号Y和两个色差信号U、V组成。

它是利用了人眼对亮度信号敏感而对色度信号相对不敏感的特点,将RGB颜色通过亮度信号公式Y=0.29R+0.50G+0.11B转换为一个亮度信号Y和两个色差分量信号U、V,即对色差信号进行了频带

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 动物植物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2