数字图像处理试题库.docx

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

数字图像处理试题库.docx

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

数字图像处理试题库.docx

数字图像处理试题库

试题库

一、填空题:

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,即对色差信号进行了频带压缩。

RGB变换为YUV坐标转换公式如下:

Y0.2990.5870.114R

U=-0.1678-0.33130.5G

V0.5-0.4187-0.0813B

将转换后YUV信

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

当前位置:首页 > 工程科技 > 机械仪表

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

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