版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章
圖像的變化15.1.1-1.顏色反相真彩色顏色反相非真彩色顏色反相25.1.1-1.顏色反相顏色反相是指正相變負(fù)相,或負(fù)相變正相g=Max-f對(duì)于二值圖像Max取值1對(duì)于256色的圖像Max取值255。真彩色圖像的3個(gè)顏色分量都需進(jìn)行這樣的運(yùn)算非真彩色圖像只需修改調(diào)色板單元的數(shù)值演示程序:色調(diào)變化/顏色反相第五章圖象變化.cpp-OnInvertColor()3真彩色圖像的顏色反相BGR
bgrb=255-Bg=255-Gr=255-R4真彩色圖像的顏色反相-反相每個(gè)圖象相素每個(gè)真彩色圖像像素?cái)?shù)據(jù)的三個(gè)顏色分量都作相同的計(jì)算voidInvertPixels(CImage*pImage,int
nMold){ BYTE *pPixelLine;
int
nLine,nByte,nBytesPerLine,nHeight;
nHeight=pImage->GetHeight();
nBytesPerLine=nWidth*pImage->GetBPP()/8; for(nLine=0;nLine<nHeight;nLine++){
pPixelLine=(BYTE*)pImage->GetPixelAddress(0,nLine);//得行首址
//真彩色圖像像素?cái)?shù)據(jù)的三個(gè)顏色分量作相同的計(jì)算
for(nByte=0;nByte<nBytesPerLine;nByte++)
pPixelLine[nByte]=nMold-pPixelLine[nByte]; }}5非真彩色圖像的顏色反相
RGBrgbb=255-Bg=255-Gr=255-R調(diào)色板調(diào)色板6非真彩色圖像顏色反相-反相調(diào)色板非真彩色圖像顏色反相只需修改調(diào)色板單元的數(shù)值
voidInvertPalette(CImage*pImage){
int
i,nColorTableEntries;
RGBQUAD
ColorTabs[256];//調(diào)色板
nColorTableEntries=pImage->GetMaxColorTableEntries();//取調(diào)色板項(xiàng)數(shù)
pImage->GetColorTable(0,nColorTableEntries,ColorTabs);//取調(diào)色板
//非真彩色圖像顏色反相只需修改調(diào)色板單元的數(shù)值
for(i=0;i<nColorTableEntries;i++) {
ColorTabs[i].rgbBlue=255-ColorTabs[i].rgbBlue;
ColorTabs[i].rgbGreen=255-ColorTabs[i].rgbGreen;
ColorTabs[i].rgbRed=255-ColorTabs[i].rgbRed; }
pImage->SetColorTable(0,nColorTableEntries,ColorTabs);//設(shè)置調(diào)色板}75.1.1-2.彩色圖像變黑白真彩色變黑白非真彩色變黑白8彩色圖像變黑白彩色圖像變黑白可通過(guò)(5.1.2)式進(jìn)行計(jì)算g=0.30r+0.59g+0.11b (5.1.2)真彩色圖像變黑白非真彩色圖像變黑白9真彩色圖像變黑白g=0.30r+0.59g+0.11b
真彩色圖像變換時(shí)RGB3分量都取g值。變換后的圖像并不是灰階圖像,其數(shù)據(jù)結(jié)構(gòu)還是原來(lái)的結(jié)構(gòu),只是它們都取相同值因此外觀為灰色而已rgb
gggg=0.30r+0.59g+0.11b
g=0.30r+0.59g+0.11bg=0.30r+0.59g+0.11b
10真彩圖像變黑白voidPixelsChangedToGray(CImage*pImage){
int
nByte,j,i,nWidth,nHeight,nBytesPerPixel; BYTE *pPixelLine,cNewPixelValue;
nWidth=pImage->GetWidth(); nHeight=pImage->GetHeight();
nBytesPerPixel=pImage->GetBPP()/8; for(i=0;i<nHeight;i++){
pPixelLine=(BYTE*)pImage->GetPixelAddress(0,i);
nByte=0; for(j=0;j<nWidth;j++){ cNewPixelValue=(BYTE)(0.11*pPixelLine[nByte]+0.59*pPixelLine[nByte+1]+0.30*pPixelLine[nByte+2]);
pPixelLine[nByte]=pPixelLine[nByte+1]pPixelLine[nByte+2]=cNewPixelValue;
nByte+=nBytesPerPixel; } }}11非真彩色圖像變黑白g=0.30r+0.59g+0.11b
非真彩色圖像的色調(diào)由調(diào)色板決定,故變換只需在調(diào)色板數(shù)據(jù)中進(jìn)行調(diào)色板每項(xiàng)數(shù)據(jù)變灰像素?cái)?shù)據(jù)保持不變由于只修改調(diào)色板中的顏色數(shù)據(jù),其強(qiáng)度未必為按序排列,故也不是灰階圖像12非真彩色圖像變黑白
rgbgggg=0.30r+0.59g+0.11bg=0.30r+0.59g+0.11bg=0.30r+0.59g+0.11b
調(diào)色板調(diào)色板13非真彩圖像變黑白voidPaletteChangedToGray(CImage*pImage){
RGBQUAD
ColorTabs[256];
int
i,nColorTableEntries,nNewGrayColor;
nColorTableEntries=pImage->GetMaxColorTableEntries();
pImage->GetColorTable(0,nColorTableEntries,ColorTabs); for(i=0;i<nColorTableEntries;i++){
nNewGrayColor=(int)(0.11*ColorTabs[i].rgbBlue+0.59*ColorTabs[i].rgbGreen
+0.30*ColorTabs[i].rgbRed);
ColorTabs[i].rgbBlue=(BYTE)nNewGrayColor;
ColorTabs[i].rgbGreen=(BYTE)nNewGrayColor;
ColorTabs[i].rgbRed=(BYTE)nNewGrayColor;
}
pImage->SetColorTable(0,nColorTableEntries,ColorTabs);}145.2.2幾何變換-水平鏡像水平鏡像同一行內(nèi)左右對(duì)應(yīng)的像素兩兩互換演示程序:圖象變化/幾何變換:水平鏡像Program第五章圖象變化.cpp-OnHorizontalFlip()15水平鏡像
0123012345612301230456123123Pixel(i,j)Pixel(nWidth-1-i,j)(1,2)(2,2)16水平鏡像voidHorizontalFlip(CImage*pNewImage,CImage*pImage){int
i,j,nByte,nWidth,nHeight,nBytesPerPixel,nBytesPerLine,nBitsPerPixel;DWORD
dwPixelValue;BYTE *pOldPixelLine,*pNewPixelLine,*pNew,*pOriginal;
nWidth=pImage->GetWidth(); nHeight=pImage->GetHeight();
nBitsPerPixel=pImage->GetBPP(); nBytesPerPixel=nBitsPerPixel/8;
CopyImage(pNewImage,pImage); for(i=0;i<nHeight;i++){
pOldPixelLine=(BYTE*)pImage->GetPixelAddress(0,i);
pNewPixelLine=(BYTE*)pNewImage->GetPixelAddress(0,i);
nByte=0; for(j=0;j<nWidth;j++){
pOriginal=pOldPixelLine+nByte;
pNew=pNewPixelLine+(nWidth-1)*nBytesPerPixel-nByte; memcpy(pNew,pOriginal,nBytesPerPixel);
nByte+=nBytesPerPixel; } }}175.2.2幾何變換-垂直鏡像垂直鏡像(留作作業(yè))同一列內(nèi)上下對(duì)應(yīng)的像素兩兩互換
0123012301230123Pixel(i,j)Pixel(i,Height-1-j)(1,2)(1,1)185.2.4幾何變換-整數(shù)倍放大(擴(kuò)展法)圖像的整數(shù)倍放大是指圖像的1個(gè)像素放大成1個(gè)n×n的矩形塊,粒子變粗但像素?cái)?shù)量不變。演示程序:圖象變化/幾何變換:放大1倍Program第五章圖象變化.cpp-OnZoomIn()012012012345012345Pixel(i,j)Pixel(2*i,2*j)Pixel(2*i,2*j+1)Pixel(2*i+1,2*j)Pixel(2*i+1,2*j+1)19整數(shù)倍放大voidZoomInImage(CImage*pNewImage,CImage*pImage,int
nTimesFactor){
inti,j,nRepeat,nWidth,nHeight,nNewWidth,nNewHeight,nBytesPerPixel,nBitsPerPixel;BYTE *pNewPixel,*pOriginalPixel;
nWidth=pImage->GetWidth(); nHeight=pImage->GetHeight();
nNewWidth=pImage->GetWidth()*nTimesFactor;
nNewHeight=pImage->GetHeight()*nTimesFactor;
nBitsPerPixel=pImage->GetBPP(); nBytesPerPixel=nBitsPerPixel/8;
pNewImage->Create(nNewWidth,nNewHeight,nBitsPerPixel,0););//建立放大的圖像
CopyColorTables(pNewImage,pImage);//復(fù)制調(diào)色板
for(i=0;i<nNewHeight;i++){
pOriginalPixel=(BYTE*)pImage->GetPixelAddress(0,i/nTimesFactor);//得原圖行首址
pNewPixel=(BYTE*)pNewImage->GetPixelAddress(0,i);//得新圖行首址
for(j=0;j<nWidth;j++){
for(nRepeat=0;nRepeat<nTimesFactor;nRepeat++) {
memcpy(pNewPixel,pOriginalPixel,nBytesPerPixel);//復(fù)制像素?cái)?shù)據(jù)
pNewPixel+=nBytesPerPixel; }
pOriginalPixel+=nBytesPerPixel; }}}20幾何變換-整數(shù)倍縮小(跳點(diǎn)法)整數(shù)倍縮小用跳點(diǎn)方式實(shí)現(xiàn)(留作作業(yè))012012012345012345Pixel(i,j)Pixel(i/2,j/2)(2,1)(4,2)215.3圖像的非整數(shù)倍縮放由于圖像的離散性,非整數(shù)倍縮放后計(jì)算出的坐標(biāo)值不一定是整數(shù),故需要重新決定整數(shù)坐標(biāo)值。常用的方法是:最近鄰點(diǎn)法坐標(biāo)的計(jì)算結(jié)果作四舍五入處理,得到它最接近的點(diǎn)的坐標(biāo)。雙線性內(nèi)插法在xy兩個(gè)方向上作線性內(nèi)插,靠得近的像素的權(quán)值取得大,離得遠(yuǎn)的像素的權(quán)值取得小。(1,1)(1.67,1.67)335522逆向算法
設(shè)原圖像為f(x,y),幾何變換后的新圖像為g(u,v),則由像素的x、y坐標(biāo)計(jì)算變換后對(duì)應(yīng)的u、v坐標(biāo)的計(jì)算稱為正向計(jì)算。u=Fu(x,y) (5.6.1)v=Fv(x,y) (5.6.2)為了避免新圖像中像素的遺漏,通常采用逆向算法。坐標(biāo)轉(zhuǎn)換計(jì)算中,u、v應(yīng)遍歷新圖像中的每一個(gè)像素。x=Fx(u,v) (5.6.3)y=Fy(u,v) (5.6.4)(1,1)(1.67,1.67)3355正向計(jì)算逆向算法23最近鄰點(diǎn)法
坐標(biāo)的計(jì)算結(jié)果作四舍五入處理,得到它最接近的點(diǎn)的坐標(biāo)。為了防止顏色失真,真彩色圖像的幾何變換只能采用最近鄰點(diǎn)法演示程序:幾何變換/非整數(shù)倍縮放(1.3倍)Program第五章圖象編程.cpp-ScaleByCloser()(x,y)(x,y)(x+1,y)(x+1,y+1)(x,y+1)24voidScaleByCloser(CImage*pDestImage,CImage*pSourceImage,double
dMultiple){
nWidth=pSourceImage->GetWidth(); nHeight=pSourceImage->GetHeight();
nNewWidth=(int)(nWidth*dMultiple); nNewHeight=(int)(nHeight*dMultiple);
nBytesPerPixel=pSourceImage->GetBPP()/8;
pDestImage->Create(nNewWidth,nNewHeight,pSourceImage->GetBPP(),0);
CopyColorTables(pDestImage,pSourceImage); for(nYInNew=0;nYInNew<nNewHeight;nYInNew++) {
dYInOld=(double)nYInNew/dMultiple;
nOldY=(int)dYInOld;
dYFraction=dYInOld-(double)nOldY; if(dYFraction>0.5&&nOldY<nHeight-1)
nOldY++; for(nXInNew=0;nXInNew<nNewWidth;nXInNew++){
dXInOld=(double)nXInNew/dMultiple; nOldX=(int)dXInOld;
dXFraction=dXInOld-(double)nOldX; if(dXFraction>0.5&&nOldX<nWidth-1)
nOldX++;
pNewPixel=(BYTE*)pDestImage->GetPixelAddress(nXInNew,nYInNew);
pPixel=(BYTE*)pSourceImage->GetPixelAddress(nOldX,nOldY); memcpy(pNewPixel,pPixel,nBytesPerPixel); } }}25雙線性內(nèi)插法
(x,y)點(diǎn)處灰度值的計(jì)算公式如下:
p=
x–X (5.7.1)q=y-Y (5.7.2)
f(x,y)=(1-q)[(1-p)f(X,Y)+p
f(X+1,Y)]+q[(1-p)f(X,Y+1)+p
f(X+1,Y+1)] (5.7.3)灰階圖像采用雙線性內(nèi)插法實(shí)現(xiàn)生成的圖像灰度變化平緩柔和,沒有不連續(xù)的缺點(diǎn)。演示程序:幾何變換/非整數(shù)倍縮放(1.3倍)Program第五章圖象編程.cpp-ScaleByTwoLinear()(x,y)(X,Y)(X+1,Y)(X+1,Y+1)(X,Y+1)1-ppq1-q26voidScaleByTwoLinear(CImage*pDestImage,CImage*pSourceImage,double
dMultiple){
dwUpLeft=dwUpRight=dwDownLeft=dwDownRight=dwPixelValue=0;
nWidth=pSourceImage->GetWidth(); nHeight=pSourceImage->GetHeight();
nNewWidth=(int)(nWidth*dMultiple); nNewHeight=(int)(nHeight*dMultiple);
nBytesPerPixel=pSourceImage->GetBPP()/8;
pDestImage->Create(nNewWidth,nNewHeight,pSourceImage->GetBPP());
CopyColorTables(pDestImage,pSourceImage);for(nYInNew=0;nYInNew<nNewHeight;nYInNew++){
nY=(int)(nYInNew/dMultiple);
if(nY+1>=nHeight)
nY=nHeight-2; for(nXInNew=0;nXInNew<nNewWidth;nXInNew++){
nX=(int)(nXInNew/dMultiple);
if(nX+1>=nWidth)
nX=nWidth-2;
dX=(double)nXInNew/dMultiple; dY=(double)nYInNew/dMultiple;
dXFraction=dX-nX; dYFraction=dY-nY;27
pPixel=(BYTE*)pSourceImage->GetPixelAddress(nX,nY);
memcpy(&dwUpLeft,pPixel,nBytesPerPixel);
pPixel=(BYTE*)pSourceImage->GetPixelAddress(nX+1,nY);
memcpy(&dwUpRight,pPixel,nBytesPerPixel);
pPixel=(BYTE*)pSourceImage->GetPixelAddress(nX,nY+1);
memcpy(&dwDownLeft,pPixel,nBytesPerPixel);
pPixel=(BYTE*)pSourceImage->GetPixelAddress(nX+1,nY+1);
memcpy(&dwDownRight,pPixel,nBytesPerPixel);
dXWeigh=(1-dXFraction)*dwUpLeft+dXFraction*dwUpRight;
dYWeigh=(1-dXFraction)*dwDownLeft+dXFraction*dwDownRight;
dwPixelValue=(COLORREF)((1-dYFraction)*dXWeigh+dYFraction*dYWeigh);
pNewPixel=(BYTE*)pDestImage->GetPixelAddress(nXInNew,nYInNew);
memcpy(pNewPixel,&dwPixelValue,nBytesPerPixel);}}}285.2.5幾何變換-旋轉(zhuǎn)順時(shí)針旋轉(zhuǎn)90度通過(guò)行列數(shù)據(jù)的交換來(lái)實(shí)現(xiàn)演示程序:圖象變化/幾何變換:順時(shí)針旋轉(zhuǎn)90度Program第五章圖象變化.cpp-OnRotate90Clockwise()0120123401234012(2,1)(3,2)Pixel(x,y)Pixel(OldHeigh-1-y,x)OldHeighxyyX?29順時(shí)針旋轉(zhuǎn)90度voidRotate90Clockwise(CImage*pNewImage,CImage*pImage){
int
nBytesPerPixel,nWidth,nHeight,nX,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 樂視金融知識(shí)競(jìng)賽
- 康服務(wù)與管理導(dǎo)論
- 2025年度汽車運(yùn)輸合同履約保證金范本
- 湖北省部分省級(jí)示范高中2024-2025學(xué)年高一上學(xué)期1月期末考試歷史試卷(含答案)
- 二零二五年度甜品店轉(zhuǎn)讓及轉(zhuǎn)租經(jīng)營(yíng)管理合同
- 2025年度二零二五年度房產(chǎn)買賣合同解除與房屋交接及違約責(zé)任協(xié)議
- 2025年度結(jié)伴自駕游極限探險(xiǎn)合同
- 2025年度珠寶首飾購(gòu)銷合同圖片制作與鑒定服務(wù)合同
- 二零二五年度版員工零工經(jīng)濟(jì)聘用合同
- 2025年度水田承包與農(nóng)村土地確權(quán)登記合作合同
- 三年級(jí)上冊(cè)遞等式計(jì)算練習(xí)300題及答案
- 政治畫像品德操守自我評(píng)價(jià)3篇
- 奶茶督導(dǎo)述職報(bào)告
- 山東萊陽(yáng)核電項(xiàng)目一期工程水土保持方案
- 白熊效應(yīng)(修訂版)
- 視頻監(jiān)控維保項(xiàng)目投標(biāo)方案(技術(shù)標(biāo))
- 社會(huì)組織能力建設(shè)培訓(xùn)
- 立項(xiàng)報(bào)告蓋章要求
- 2022年睪丸腫瘤診斷治療指南
- 被執(zhí)行人給法院執(zhí)行局寫申請(qǐng)范本
- 主變壓器試驗(yàn)報(bào)告模板
評(píng)論
0/150
提交評(píng)論