数字图像处理试题库Word格式.docx
《数字图像处理试题库Word格式.docx》由会员分享,可在线阅读,更多相关《数字图像处理试题库Word格式.docx(48页珍藏版)》请在冰点文库上搜索。
*pbyRed=gray;
//将取到最大值赋给像素红分量
}
for(intj=height/3;
2*height/3;
j++)//每行
DibWidth;
i++)//每列
inta=*p_data;
//获得当前点值
*p_data=255-a;
//取反
p_data++;
//指向下一指针
for(intj=2*height/3;
height;
j++)//每行
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;
GetWidth();
GetHeight();
//计算图像平均灰度值T,再进行二值化预解决,像素灰度值不不大于T置白,否则置黑。
for(j=0;
j++)//对图像进行二值化预解决
{
for(i=0;
wide;
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;
height-1;
j++)
for(i=1;
wide-1;
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;
LPBYTEp_data;
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<
height-1;
for(i=1;
i<
wide-1;
//由于使用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<
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->
LPBITMAPINFOpBitmapInfo=CDibNew1->
GetInfo();
intbitmapHeight=CDibNew1->
GetHeight();
intbitmapWidth=CDibNew1->
GetWidth();
if(CDibNew1->
GetRGB())//Hasacolortable
CPalette*hPalette=CreateBitmapPalette(CDibNew1);
CPalette*hOldPalette=pDC->
SelectPalette(hPalette,true);
RealizePalette();
LPBYTEtemp,temp1,temp2;
temp=newBYTE[CDibNew1->
GetHeight()*CDibNew1->
GetHeight()];
memset(temp,0,CDibNew1->
GetHeight());
for(intn=0;
n<
=256;
n++)
temp1=temp
temp2=pBitmapData
bitmapHeight;
j++)
{
for(inti=0;
bitmapWidth;
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);
SelectPalette(hOldPalette,true);
DeleteObject(hPalette);
}
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];
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;
GetWidth();
GetHeight();
for(intj=n2;
height-n2;
for(inti=n2;
wide-n2;
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];
//把mado[m]中值按下降顺序用冒泡法排序
do{
chg=0
for(m=0;
m<
nn-1;
m++)
if(mado[m]<
mado[m+1])
{
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<
numberOfColors;
++x)
//请修改颜色表
if((x>
0)&
(x<
50))
51)&
100))
101)&
150))
151)&
200))
201)&
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;
=j+1;
yy++)
for(intxx=i-1;
=i+1;
xx++)
{
intmado[m]=p_data[yy*wide+xx];
m++;
do
{
intchg=0;
for(m=0;
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;
//指向源图像指针
//指向要复制区域指针
LPBYTElpDst;
//指向复制图像指针
longheight=this->
//图像高与宽
longwide=this->
答:
LPBYTEtemp;
LONGi;
//循环变量
LONGj;
temp=newBYTE[wide*height];
//暂时分派内存,以保存一行图像
//针对上半图像进行操作
for(i=0;
wide;
{
for(j=0;
{
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;
11.编程实现24位彩色图像进行解决。
将24位彩色图像平均提成三个等高区域,对这三个区域分别进行灰度化解决、逆反解决、曝光解决。
(1)对第一种区域进行灰度变换。
(2)对第二个区域进行逆反解决。
(3)对第三个区域进行曝光解决。
MakegChange()
BYTE*p_data;
intwide,height,DibWidth;
p_data=this->
wide=this->
DibWidth=this->
for(intj=0;
height/3;
j++)
for(inti=0;
;
)
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信