版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
圖像的幾何變換第一頁,共一百二十六頁,編輯于2023年,星期二6.1幾何變換基礎6.1.1概述圖像的幾何變換,是指使用戶獲得或設計的原始圖像。按照需要產生大小、形狀和位置的變化。從圖像類型來分,圖像的幾何變換有二維平面圖像的幾何變換和三維圖像的幾何變換以及由三維向二維平面投影變換等。從變換的性質分,圖像的幾何變換有平移、比例縮放、旋轉、反射和錯切等基本變換,透視變換等復合變換,以及插值運算等。第二頁,共一百二十六頁,編輯于2023年,星期二數(shù)字圖像是把連續(xù)圖像在坐標空間和性質空間離散化了的圖像。例如,一幅二維數(shù)字圖像就是把一幅連續(xù)的二維(2D)。圖像在坐標空間XOY和性質空間F都離散化了的圖像,它可以用一組二維(2D)數(shù)組f(x,y)來表示,其中x和y表示2D空間XOY中一個坐標點的位置,f代表圖像在點(x,y)的某種性質F的數(shù)值,如果所處理的是一幅灰度圖,這時f表示灰度值。而且此時f、x、y都在整數(shù)集合中取值。因此,除了插值運算外,常見的圖像幾何變換可以通過與之對應的矩陣線性變換來實現(xiàn)。第三頁,共一百二十六頁,編輯于2023年,星期二對于2D圖像幾何變換及變換中心在坐標原點的比例縮放、反射、錯切和旋轉等各種變換,都可以用2×2的矩陣表示和實現(xiàn)。但是一個2×2變換矩陣 卻不能實現(xiàn)圖像的平移以及繞任意點的比例縮放、反射、錯切和旋轉等各種變換。因此,為了能夠用統(tǒng)一的矩陣線性變換形式,表示和實現(xiàn)這些常見的圖像幾何變換,就需要引入一種新的坐標,即齊次坐標。利用齊次坐標來變換處理,才能實現(xiàn)上述各種2D圖像的幾何變換。第四頁,共一百二十六頁,編輯于2023年,星期二6.1.2齊次坐標現(xiàn)設點P0(x0,y0)進行平移后,移到P(x,y),其中x方向的平移量為Δx,y方向的平移量為Δy。那么,點P(x,y)的坐標為如圖6-1所示。這個變換用矩陣的形式可以表示為第五頁,共一百二十六頁,編輯于2023年,星期二圖6-1點的平移第六頁,共一百二十六頁,編輯于2023年,星期二而平面上點的變換矩陣 中沒有引入平移常量,無論a、b、c、d取什么值,都不能實現(xiàn)上述的平移變換。因此,需要使用2×3階變換矩陣,取其形式為此矩陣的第一、二列構成單位矩陣,第三列元素為平移常量。由上述可知,對2D圖像進行變換,只需要將圖像的點集矩陣乘以變換矩陣即可,2D圖像對應的點集矩陣是2×n階的,而上式擴展后的變換矩陣是2×3階的矩陣,這不符合矩陣相乘時要求前者的列數(shù)與后者的行數(shù)相等的規(guī)則。第七頁,共一百二十六頁,編輯于2023年,星期二所以需要在點的坐標列矩陣[xy]T中引入第三個元素,增加一個附加坐標,擴展為3×1的列矩陣[xy1]T,這樣用三維空間點(x,y,1)表示二維空間點(x,y),即采用一種特殊的坐標,可以實現(xiàn)平移變換,變換結果為式 符合上述平移后的坐標位置。通常將2×3階矩陣擴充為3×3階矩陣,以拓寬功能。由此可得平移變換矩陣為第八頁,共一百二十六頁,編輯于2023年,星期二下面再驗證一下點P(x,y)按照3×3的變換矩陣T平移變換的結果從上式可以看出,引入附加坐標后,擴充了矩陣的第3行,并沒有使變換結果受到影響。這種用n+1維向量表示n維向量的方法稱為齊次坐標表示法。第九頁,共一百二十六頁,編輯于2023年,星期二因此,2D圖像中的點坐標(x,y)通常表示成齊次坐標(Hx,Hy,H),其中H表示非零的任意實數(shù),當H=1時,則(x,y,1)就稱為點(x,y)的規(guī)范化齊次坐標。顯然規(guī)范化齊次坐標的前兩個數(shù)是相應二維點的坐標,沒有變化,僅在原坐標中增加了H=1的附加坐標。由點的齊次坐標(Hx,Hy,H)求點的規(guī)范化齊次坐標(x,y,1),可按如下公式進行:第十頁,共一百二十六頁,編輯于2023年,星期二齊次坐標的幾何意義相當于點(x,y)落在3D空間H=1的平面上,如圖6-2所示。如果將XOY平面內的三角形abc的各頂點表示成齊次坐標(xi,yi,1)(i=1,2,3)的形式,就變成H=1平面內的三角形a1b1c1的各頂點。圖6-2齊次坐標的幾何意義第十一頁,共一百二十六頁,編輯于2023年,星期二齊次坐標在2D圖像幾何變換中的另一個應用是:如某點S(60000,40000)在16位計算機上表示則大于32767的最大坐標值,需要進行復雜的操作。但如果把S的坐標形式變成(Hx,Hy,H)形式的齊次坐標,則情況就不同了。在齊次坐標系中,設H=1/2,則(60000,40000)的齊次坐標為(1/2x,1/2y,1/2),那么所要表示的點變?yōu)?30000,20000,1/2),此點顯然在16位計算機上二進制數(shù)所能表示的范圍之內。因此,采用齊次坐標,并將變換矩陣改成3×3階的形式后,便可實現(xiàn)所有2D圖像幾何變換的基本變換。第十二頁,共一百二十六頁,編輯于2023年,星期二6.1.3二維圖像幾何變換的矩陣利用齊次坐標及改成3×3階形式的變換矩陣,實現(xiàn)2D圖像幾何變換的基本變換的一般過程是:將2×n階的二維點集矩陣 表示成齊次坐標 的形式,然后乘以相應的變換矩陣即可完成,即變換后的點集矩陣=變換矩陣T×變換前的點集矩陣(圖像上各點的新齊次坐標)(圖像上各點的原齊次坐標)第十三頁,共一百二十六頁,編輯于2023年,星期二設變換矩陣T為則上述變換可以用公式表示為第十四頁,共一百二十六頁,編輯于2023年,星期二圖像上各點的新齊次坐標規(guī)范化后的點集矩陣為引入齊次坐標后,表示2D圖像幾何變換的3×3矩陣的功能就完善了,可以用它完成2D圖像的各種幾何變換。下面討論3×3階變換矩陣中各元素在變換中的功能。幾何變換的3×3矩陣的一般形式為第十五頁,共一百二十六頁,編輯于2023年,星期二3×3的階矩陣T可以分成四個子矩陣。其中,這一子矩陣可使圖像實現(xiàn)恒等、比例、反射(或鏡像)、錯切和旋轉變換。[lm]這一行矩陣可以使圖像實現(xiàn)平移變換。[p
q]T這一列矩陣可以使圖像實現(xiàn)透視變換,但當p=0,q=0時它無透視作用。[s]這一元素可以使圖像實現(xiàn)全比例變換。例如,將圖像進行全比例變換,即第十六頁,共一百二十六頁,編輯于2023年,星期二將齊次坐標 規(guī)范化后, 。由此可見,當s>1時,圖像按比例縮??;當0<s<1時,整個圖像按比例放大;當s=1時,圖像大小不變。第十七頁,共一百二十六頁,編輯于2023年,星期二6.2圖像比例縮放6.2.1圖像比例縮放變換圖像比例縮放是指將給定的圖像在x軸方向按比例縮放fx倍,在y軸方向按比例縮放fy倍,從而獲得一幅新的圖像。如果fx=fy,即在x軸方向和y軸方向縮放的比率相同,稱這樣的比例縮放為圖像的全比例縮放。如果fx≠fy,圖像的比例縮放會改變原始圖像的像素間的相對位置,產生幾何畸變。設原圖像中的點P0(x0,y0)比例縮放后,在新圖像中的對應點為P(x,y),則P0(x0,y0)和P(x,y)之間的對應關系如圖6-3所示。第十八頁,共一百二十六頁,編輯于2023年,星期二圖6-3比例縮放第十九頁,共一百二十六頁,編輯于2023年,星期二比例縮放前后兩點P0(x0,y0)、P(x,y)之間的關系用矩陣形式可以表示為(6-1)公式(6-1)的逆運算為第二十頁,共一百二十六頁,編輯于2023年,星期二即比例縮放所產生的圖像中的像素可能在原圖像中找不到相應的像素點,這樣就必須進行插值處理。插值處理常用的方法有兩種,一種是直接賦值為和它最相近的像素值,另一種是通過一些插值算法來計算相應的像素值。前一種方法計算簡單,但會出現(xiàn)馬賽克現(xiàn)象;后者處理效果要好些,但是運算量也相應增加。在下面的算法中直接采用了前一種做法。實際上,這也是一種插值算法,稱為最鄰近插值法(NearestNeighborInterpolation)。第二十一頁,共一百二十六頁,編輯于2023年,星期二下面首先討論圖像的比例縮小。最簡單的比例縮小是當fx=fy=1/2時,圖像被縮到一半大小,此時縮小后圖像中的(0,0)像素對應于原圖像中的(0,0)像素;(0,1)像素對應于原圖像中的(0,2)像素;(1,0)像素對應于原圖像中的(2,0)像素,依此類推。圖像縮小之后,因為承載的信息量小了,所以畫布可相應縮小。此時,只需在原圖像基礎上,每行隔一個像素取一點,每隔一行進行操作,即取原圖的偶(奇)數(shù)行和偶(奇)數(shù)列構成新的圖像,如圖6-4所示。如果圖像按任意比例縮小,則需要計算選擇的行和列。第二十二頁,共一百二十六頁,編輯于2023年,星期二圖6-4圖像縮小一半第二十三頁,共一百二十六頁,編輯于2023年,星期二如果M×N大小的原圖像F(x,y)縮小為kM×kN大?。╧<1)的新圖像I(x,y)時,則I(x,y)=F(int(c×x),int(c×y))其中,c=1/k。由此公式可以構造出新圖像,如圖6-5所示。圖6-5圖像按任意比例縮小第二十四頁,共一百二十六頁,編輯于2023年,星期二當fx≠fy(fx,fy>0)時,圖像不按比例縮小,這種操作因為在x方向和y方向的縮小比例不同,一定會帶來圖像的幾何畸變。圖像不按比例縮小的方法是:如果M×N大小的舊圖F(x,y)縮小為k1M×k2N(k1<1,k2<1)大小的新圖像I(x,y)時,則
I(x,y)=F(int(c1×x),int(c2×y))其中由此公式可以構造出新圖像。第二十五頁,共一百二十六頁,編輯于2023年,星期二圖像在縮小操作中,是在現(xiàn)有的信息里如何挑選所需要的有用信息。而在圖像的放大操作中,則需要對尺寸放大后所多出來的空格填入適當?shù)南袼刂担@是信息的估計問題,所以較圖像的縮小要難一些。當fx=fy=2時,圖像被按全比例放大2倍,放大后圖像中的(0,0)像素對應于原圖中的(0,0)像素;(0,1)像素對應于原圖中的(0,0.5)像素,該像素不存在,可以近似為(0,0)也可以近似(0,1);(0,2)像素對應于原圖像中的(0,1)像素;(1,0)像素對應于原圖中的(0.5,0),它的像素值近似于(0,0)或(1,0)像素;(2,0)像素對應于原圖中的(1,0)像素,依此類推。其實這是將原圖像每行中的像素重復取值一遍,然后每行重復一次。圖6-6是原始圖像,圖6-7和圖6-8是分別采用上述兩種近似方法放大后的圖像。第二十六頁,共一百二十六頁,編輯于2023年,星期二圖6-6放大前的圖像第二十七頁,共一百二十六頁,編輯于2023年,星期二圖6-7按最近鄰域法放大兩倍的圖像第二十八頁,共一百二十六頁,編輯于2023年,星期二圖6-8按插值法放大兩倍的圖像第二十九頁,共一百二十六頁,編輯于2023年,星期二一般地,按比例將原圖像放大k倍時,如果按照最近鄰域法則需要將一個像素值添在新圖像的k×k的子塊中,如圖6-9所示。顯然,如果放大倍數(shù)太大,按照這種方法處理會出現(xiàn)馬賽克效應。當fx≠fy(fx,fy>0)時,圖像在x方向和y方向不按比例放大,此時,這種操作由于x方向和y方向的放大倍數(shù)不同,一定帶來圖像的幾何畸變。放大的方法是將原圖像的一個像素添到新圖像的一個k1×k2的子塊中去。為了提高幾何變換后的圖像質量,常采用線性插值法。該方法的原理是,當求出的分數(shù)地址與像素點不一致時,求出周圍四個像素點的距離比,根據(jù)該比率,由四個鄰域的像素灰度值進行線性插值,如圖6-10所示。第三十頁,共一百二十六頁,編輯于2023年,星期二圖6-9按最近鄰域法放大五倍的圖像第三十一頁,共一百二十六頁,編輯于2023年,星期二圖6-10線性插值法示意圖第三十二頁,共一百二十六頁,編輯于2023年,星期二簡化后的灰度值計算式如下:g(x,y)=(1-q){(1-p)×g([x],[y])+p×g([x]+1,[y])}+q{(1-p)×g([x],[y]+1)+p×g([x]+1,[y]+1)}式中:g(x,y)為坐標(x,y)處的灰度值,[x]、[y]分別為不大于x,y的整數(shù)。關于這個問題的詳細算法及其實現(xiàn),讀者可以參考有關參考文獻。第三十三頁,共一百二十六頁,編輯于2023年,星期二6.2.2比例縮放的實現(xiàn)圖6-11圖像比例縮放處理結果第三十四頁,共一百二十六頁,編輯于2023年,星期二下面給出這個函數(shù)的框架和主要算法。//*****************************************//函數(shù)名稱:BOOLZoomImage()//基本功能:本函數(shù)對傳入的CDibObject對象中的圖像進行縮放操作//參數(shù)說明:floatfXZoomRatioX軸方向縮放比率// floatfYZoomRatioY軸方向縮放比率// BOOLbBilinearTRUE為雙線性插值,F(xiàn)ALSE為最鄰近插值// CDibObject*pDibObject默認為NULL//返回值:BOOL成功返回TRUE,失敗返回FALSE第三十五頁,共一百二十六頁,編輯于2023年,星期二//*****************************************BOOLCGeoTrans::ZoomImage(floatfXZoomRatio,floatfYZoomRatio, BOOLbBilinear,CDibObject*pDibObject){//獲得圖像寬度和高度,計算縮放后的圖像實際寬度nNewWidth=(int)(nOldWidth*fXZoomRatio+0.5);nNewHeight=(int)(nOldHeight*fYZoomRatio+0.5);//獲取源圖像指針,為新圖像分配內存,用白色填充新圖像數(shù)據(jù)區(qū),調整新圖像信息//由圖像位數(shù)確定的移動字節(jié)數(shù)nMovedBits//針對圖像每行進行操作for(y=0;y<nNewHeight;y++){第三十六頁,共一百二十六頁,編輯于2023年,星期二//指向新圖像第y行pNewTemp=pNewBits;pNewTemp+=(nNewHeight-1[KG*3]-y)*nNewWidthBytes;//針對圖像每列進行操作for(x=0;x<nNewWidth;x++){//計算該像素在源圖像中的坐標inty0=(long)(y/fYZoomRatio+0.5);intx0=(long)(x/fXZoomRatio+0.5);//判斷是否在源圖范圍內if((x0>=0)&&(x0<nOldWidth)&&(y0>=0)&&(y0<nOldHeight)){if(bBilinear){第三十七頁,共一百二十六頁,編輯于2023年,星期二//雙線性插值}else{//指向源圖像第y0行,第x0個像素pOldTemp=pOldBits;pOldTemp+=(nOldHeight-1-y0)*nOldWidthBytes;pOldTemp+=x0*nMovedBits;memcpy(pNewTemp,pOldTemp,nMovedBits);}}pNewTemp+=nMovedBits;}}//將內存解鎖和將不再使用的內存釋放,將新圖像設置為當前圖像returnTRUE;}第三十八頁,共一百二十六頁,編輯于2023年,星期二6.3圖像平移6.3.1圖像平移變換圖6-12圖像平移第三十九頁,共一百二十六頁,編輯于2023年,星期二設點P0(x0,y0)進行平移后,移到P(x,y),其中x方向的平移量為Δx,y方向的平移量為Δy。那么,點P(x,y)的坐標為利用齊次坐標,變換前后圖像上的點P0(x0,y0)和P(x,y)之間的關系可以用如下的矩陣變換表示為(6-2)第四十頁,共一百二十六頁,編輯于2023年,星期二對變換矩陣求逆,可以得到式(6-2)的逆變換即第四十一頁,共一百二十六頁,編輯于2023年,星期二這樣,平移后的圖像上的每一點都可以在原圖像中找到對應的點。例如,對于新圖中的(0,0)像素,代入上面的方程組,可以求出對應原圖中的像素(-Δx,-Δy)。如果Δx或Δy大于0,則點(-Δx,-Δy)不在原圖像中。對于不在原圖像中的點,可以直接將它的像素值統(tǒng)一設置為0或者255(對于灰度圖就是黑色或白色)。同樣,若有像素點不在原圖像中,也就說明原圖像中有點被移出顯示區(qū)域。如果不想丟失被移出的部分圖像,可以將新生成的圖像寬度擴大|Δx|,高度擴大|Δy|。第四十二頁,共一百二十六頁,編輯于2023年,星期二圖6-13平移前的圖像第四十三頁,共一百二十六頁,編輯于2023年,星期二圖6-14平移后的圖像第四十四頁,共一百二十六頁,編輯于2023年,星期二圖6-15平移擴大后的圖像第四十五頁,共一百二十六頁,編輯于2023年,星期二6.3.2圖像平移的算法按照上述理論,可以比較容易地用VC++來實現(xiàn)圖像的平移。下面介紹灰度圖像的平移,因為灰度圖像每個像素位數(shù)正好是8位,即1個字節(jié),在進行圖像處理時可以不用考慮拼湊字節(jié)的問題。而且由于灰度圖像調色板的特殊性,進行灰度圖像處理時不必考慮調色板的問題。所以,在介紹圖像處理時,一般采用灰度圖像,以便將重點放在算法本身。由上述分析,可以得到實現(xiàn)圖像平移的算法如下。第四十六頁,共一百二十六頁,編輯于2023年,星期二//*****************************************//函數(shù)名稱:BOOLTranslationPixel()//基本功能:本函數(shù)對傳入的CDibObject對象中的圖像進行逐點平移操作//參數(shù)說明:longlXOffset X軸平移量(像素數(shù))// longlYOffset Y軸平移量(像素數(shù))//返回值:BOOL成功返回TRUE,失敗返回FALSE//注意:該函數(shù)不會改變圖像的大小,移出的部分圖像將截去,空白部分用白色填充//*****************************************BOOLCGeoTrans::TranslationPixel(longlXOffset,longlYOffset,CDibObject*pDibObject){//定義變量,獲得源圖像指針及其圖像信息,為新圖像分配內存及用白色填充新圖第四十七頁,共一百二十六頁,編輯于2023年,星期二//由圖像位數(shù)確定的移動字節(jié)數(shù)nMovedBits,對于灰度圖像有nMovedBits=1//每行for(y=0;y<nHeight;y++){pNewTemp=pNewBits;pNewTemp+=(nHeight-1-y)*nWidthBytes;//每列for(x=0;x<nWidth;x++){//指向新DIB第y行,第x個像素的指針,計算該像素在源DIB中的坐標intx0=x-lXOffset;inty0=y-lYOffset;//判斷是否在源圖范圍內if((x0>=0)&&(x0<nWidth)&&(y0>=0)&&(y0<nHeight))第四十八頁,共一百二十六頁,編輯于2023年,星期二{//指向源DIB第y0行,第x0個像素的指針pOldTemp=pOldBits;pOldTemp+=(nHeight-1-y0)*nWidthBytes;pOldTemp+=x0*nMovedBits;//復制像素memcpy(pNewTemp,pOldTemp,nMovedBits);}pNewTemp+=nMovedBits;}}//用新圖像數(shù)據(jù)填充源圖像數(shù)據(jù)區(qū)memcpy(pOldBits,pNewBits,nWidthBytes*nHeight);}第四十九頁,共一百二十六頁,編輯于2023年,星期二6.4圖像鏡像6.4.1圖像鏡像變換圖像的鏡像變換不改變圖像的形狀。圖像的鏡像(Mirror)變換分為兩種:一種是水平鏡像,另外一種是垂直鏡像。圖像的水平鏡像操作是將圖像左半部分和右半部分以圖像垂直中軸線為中心進行鏡像對換;圖像的垂直鏡像操作是將圖像上半部分和下半部分以圖像水平中軸線為中心進行鏡像對換,如圖6-16所示。第五十頁,共一百二十六頁,編輯于2023年,星期二圖6-16圖像的鏡像第五十一頁,共一百二十六頁,編輯于2023年,星期二圖像的鏡像變換也可以用矩陣變換表示。設點P0(x0,y0)進行鏡像后的對應點為P(x,y),圖像高度為fHeight,寬度為fWidth,原圖像中P0(x0,y0)經過水平鏡像后坐標將變?yōu)椋╢Width-x0,y0),其矩陣表達式為(6-3)第五十二頁,共一百二十六頁,編輯于2023年,星期二逆運算矩陣表達式為即第五十三頁,共一百二十六頁,編輯于2023年,星期二同樣,P0(x0,y0)經過垂直鏡像后坐標將變?yōu)?x0,fHeight-y0),其矩陣表表達式為(6-4)第五十四頁,共一百二十六頁,編輯于2023年,星期二逆運算矩陣表達式為即第五十五頁,共一百二十六頁,編輯于2023年,星期二6.4.2圖像鏡像的算法按照上面的變換公式(6-3)和(6-4),可以比較簡單的實現(xiàn)圖像的水平和垂直鏡像操作,讀者可以參照6.3.2中平移的算法,寫出公式(6-3)和(6-4)對應的算法。和圖像平移一樣,在垂直鏡像中也可以利用位圖存儲的連續(xù)性整行復制圖像。下面將介紹采用這種方法的算法,其主要算法如下,bDirection為真時表示水平鏡像,否則為垂直鏡像。第五十六頁,共一百二十六頁,編輯于2023年,星期二//由圖像位數(shù)確定的移動字節(jié)數(shù)nMovedBits//判斷鏡像方式if(bDirection){//垂直中軸坐標intnMiddleX=nWidth/2;//針對圖像每行進行操作for(y=0;y<nHeight;y++){//指向圖像的倒數(shù)第y行pOldTemp=pOldBits;pOldTemp+=y*nWidthBytes;pNewTemp=pNewBits;第五十七頁,共一百二十六頁,編輯于2023年,星期二pNewTemp+=y*nWidthBytes;//針對每行圖像左半部分進行操作for(x=0;x<=nMiddleX;x++){//將源圖像第x個像素復制到新圖像倒數(shù)第x個像素pTemp1=pOldTemp+x*nMovedBits;pTemp2=pNewTemp+(nWidth-1-x)*nMovedBits;memcpy(pTemp2,pTemp1,nMovedBits);//將源圖像倒數(shù)第x個像素復制到新圖像第x個像素pTemp1=pOldTemp+(nWidth-1-x)*nMovedBits;pTemp2=pNewTemp+x*nMovedBits;memcpy(pTemp2,pTemp1,nMovedBits);}}}第五十八頁,共一百二十六頁,編輯于2023年,星期二else{//水平中軸坐標intnMiddleY=nHeight/2;//針對上半圖像進行操作for(y=0;y<=nMiddleY;y++){//指向源圖像倒數(shù)第y行像素起點的指針pOldTemp=pOldBits;pOldTemp+=y*nWidthBytes;//指向新圖像第y行像素起點的指針pNewTemp=pNewBits;pNewTemp+=(nHeight-1-y)*nWidthBytes;//將源圖像倒數(shù)第y行像素復制到新圖像第y行第五十九頁,共一百二十六頁,編輯于2023年,星期二memcpy(pNewTemp,pOldTemp,nWidthBytes);//指向源圖像第y行像素起點的指針pOldTemp=pOldBits;pOldTemp+=(nHeight-1-y)*nWidthBytes;//指向新圖像倒數(shù)第y行像素起點的指針pNewTemp=pNewBits;pNewTemp+=y*nWidthBytes;//將源圖像第y行像素復制到新圖像倒數(shù)第y行memcpy(pNewTemp,pOldTemp,nWidthBytes);}}//用新圖像數(shù)據(jù)填充原圖像數(shù)據(jù)區(qū)memcpy(pOldBits,pNewBits,nWidthBytes*nHeight);第六十頁,共一百二十六頁,編輯于2023年,星期二圖6-17鏡像前的圖像第六十一頁,共一百二十六頁,編輯于2023年,星期二圖6-18水平鏡像第六十二頁,共一百二十六頁,編輯于2023年,星期二圖6-19垂直鏡像第六十三頁,共一百二十六頁,編輯于2023年,星期二6.5圖像旋轉6.5.1圖像旋轉變換本節(jié)介紹一種相對復雜的幾何變換——圖像的旋轉。一般圖像的旋轉是以圖像的中心為原點,將圖像上的所有像素都旋轉一個相同的角度。圖像的旋轉變換是圖像的位置變換,但旋轉后,圖像的大小一般會改變。和圖像平移一樣,在圖像旋轉變換中既可以把轉出顯示區(qū)域的圖像截去,也可以擴大圖像范圍以顯示所有的圖像。如圖6-20、圖6-21所示。第六十四頁,共一百二十六頁,編輯于2023年,星期二圖6-20旋轉前的圖像第六十五頁,共一百二十六頁,編輯于2023年,星期二圖6-21旋轉θ后的圖像(擴大圖像、轉出部分被截)第六十六頁,共一百二十六頁,編輯于2023年,星期二同樣,圖像的旋轉變換也可以用矩陣變換表示。設點P0(x0,y0)旋轉θ角后的對應點為P(x,y),如圖6-22所示。那么,旋轉前后點P0(x0,y0)、P(x,y)的坐標分別是:圖6-22圖像旋轉θ角第六十七頁,共一百二十六頁,編輯于2023年,星期二寫成矩陣表達式為(6-5)第六十八頁,共一百二十六頁,編輯于2023年,星期二其逆運算為利用公式(6-5)可以確定旋轉后圖像上的像素。例如,當θ=30°時,公式(6-5)為第六十九頁,共一百二十六頁,編輯于2023年,星期二而且,此時xmin=0.866-0.5×3=-0.634;xmin=0.866×3-0.5=2.098ymin=0.866+0.5=1.366;ymax=0.866×3+0.5×3=4.098圖6-23圖像旋轉θ角第七十頁,共一百二十六頁,編輯于2023年,星期二利用公式(6-5)進行圖像旋轉時需要注意如下兩點:(1)圖像旋轉之前,為了避免信息的丟失,一定要有坐標平移,具體的做法有如圖6-24所示的兩種方法。圖6-24圖像旋轉之前進行的平移第七十一頁,共一百二十六頁,編輯于2023年,星期二(2)圖像旋轉之后,會出現(xiàn)許多空洞點,如圖6-23所示。對這些空洞點必須進行填充處理,否則畫面效果不好,一般也稱這種操作為插值處理。最簡單的方法是行插值方法或列插值方法:①找出當前行的最小和最大的非白點的坐標,記作:(i,k1)、(i,k2)。②在(k1,k2)范圍內進行插值,插值的方法是:空點的像素值等于前一點的像素值。③同樣的操作重復到所有行。經過如上的插值處理之后,圖像效果就變得自然。如圖6-25所示。列插值方法與此類同,請讀者自己給出。第七十二頁,共一百二十六頁,編輯于2023年,星期二圖6-25圖6-23中的圖像處理后的效果第七十三頁,共一百二十六頁,編輯于2023年,星期二6.5.2圖像旋轉的實現(xiàn)按照上述理論,也可以用VC++編程實現(xiàn)圖像的旋轉。為了將重點放在算法本身,下面介紹灰度圖像的旋轉算法。由上面的公式(6-6)以及產生空穴時的雙線性插值方法,可以編制一個實現(xiàn)圖像旋轉的函數(shù)RotateDIB2()。下面給出這個函數(shù)的框架和主要算法。//*****************************************//函數(shù)名稱:BOOLRotate()//基本功能:本函數(shù)對傳入的CDibObject對象中的圖像進行旋轉操作//參數(shù)說明:intiRotateAngle旋轉的角度(0~360度)// BOOLbBilinearTRUE為雙線性插值,F(xiàn)ALSE為最鄰近插值// CDibObject*pDibObject默認為NULL第七十四頁,共一百二十六頁,編輯于2023年,星期二//返回值:BOOL成功返回TRUE,失敗返回FALSE//*****************************************BOOLCGeoTrans::Rotate(intnRotateAngle,BOOLbBilinear,CDibObject*pDibObject){//獲得圖像寬度和高度:nOldWidth、nOldHeight//定義旋轉角度(弧度)及其正弦和余弦值:fRotateAngle、fSina、fCosa//定義源圖四個角的坐標、旋轉后四個角的坐標(以圖像中心為坐標系原點)//計算旋轉角度的正弦和余弦值//計算源圖的四個角的坐標(以圖像中心為坐標系原點)//計算新圖四個角的坐標(以圖像中心為坐標系原點)第七十五頁,共一百二十六頁,編輯于2023年,星期二fDstX1=fCosa*fSrcX1+fSina*fSrcY1;fDstY1=-fSina*fSrcX1+fCosa*fSrcY1;fDstX2=fCosa*fSrcX2+fSina*fSrcY2;fDstY2=-fSina*fSrcX2+fCosa*fSrcY2;fDstX3=fCosa*fSrcX3+fSina*fSrcY3;fDstY3=-fSina*fSrcX3+fCosa*fSrcY3;fDstX4=fCosa*fSrcX4+fSina*fSrcY4;fDstY4=-fSina*fSrcX4+fCosa*fSrcY4;//計算旋轉后的圖像實際寬度intnNewWidth=(long)(max(fabs(fDstX4-fDstX1),fabs(fDstX3-fDstX2))+0.5);//計算旋轉后的圖像高度第七十六頁,共一百二十六頁,編輯于2023年,星期二intnNewHeight=(long)(max(fabs(fDstY4-fDstY1),fabs(fDstY3-fDstY2))+0.5);//計算兩個常數(shù)f1=(float)(-0.5*(nNewWidth-1)*fCosa-0.5*(nNewHeight-1)*fSina+0.5*(nOldWidth-1));f2=(float)(0.5*(nNewWidth-1)*fSina-0.5*(nNewHeight-1)*fCosa+0.5*(nOldHeight-1));//獲取指向源圖像的指針,為旋轉圖像分配內存并用白色填充新圖像數(shù)據(jù)區(qū)//由圖像位數(shù)確定的移動字節(jié)數(shù)nMovedBits//針對圖像每行進行操作for(y=0;y<nNewHeight;y++){第七十七頁,共一百二十六頁,編輯于2023年,星期二//指向新圖像第y行pNewTemp=pNewBits;pNewTemp+=(nNewHeight-1-y)*nNewWidthBytes;//針對圖像每列進行操作for(x=0;x<nNewWidth;x++){//計算該像素在源圖像中的坐標inty0=(long)(-((float)x)*fSina+((float)y)*fCosa+f2+0.5);intx0=(long)(((float)x)*fCosa+((float)y) *fSina+f1+0.5);//判斷是否在源圖范圍內第七十八頁,共一百二十六頁,編輯于2023年,星期二if((x0>=0)&&(x0<nOldWidth)&&(y0>=0)&&(y0<nOldHeight)){//用雙線性插值if(bBilinear){unsignedchar*pTemp=Interpolation(nOldWidth,nOldHeight,(float)x0,(float)y0,nOldWidthBytes,nMovedBits,pOldBits);//復制像素memcpy(pNewTemp,pTemp,nMovedBits);delete[]pTemp;}else{第七十九頁,共一百二十六頁,編輯于2023年,星期二//指向源圖像第y0行,第x0個像素pOldTemp=pOldBits;pOldTemp+=(nOldHeight-1-y0)*nOldWidthBytes;pOldTemp+=x0*nMovedBits;//復制像素memcpy(pNewTemp,pOldTemp,nMovedBits);}}pNewTemp+=nMovedBits;}}//將內存解鎖和將不再使用的內存釋放,將新圖像設置為當前圖像returnTRUE;}第八十頁,共一百二十六頁,編輯于2023年,星期二圖6-26旋轉前的圖像第八十一頁,共一百二十六頁,編輯于2023年,星期二圖6-27旋轉15°并進行插值處理的圖像第八十二頁,共一百二十六頁,編輯于2023年,星期二圖6-28被放大的旋轉前圖像第八十三頁,共一百二十六頁,編輯于2023年,星期二6-29旋轉300并進行插值處理的放大圖像第八十四頁,共一百二十六頁,編輯于2023年,星期二6.6圖像復合變換6.6.1圖像復合變換圖像的復合變換是指對給定的圖像連續(xù)施行若干次如前所述的平移、鏡像、比例、旋轉等基本變換后所完成的變換,圖像的復合變換又叫級聯(lián)變換。利用齊次坐標,對給定的圖像依次按一定順序連續(xù)施行若干次基本變換,其變換的矩陣仍然可以用3×3階的矩陣表示,而且從數(shù)學上可以證明,復合變換的矩陣等于基本變換的矩陣按順序依次相乘得到的組合矩陣。設對給定的圖像依次進行了基本變換F1,F(xiàn)2,…,F(xiàn)N,它們的變換矩陣分別為T1,T2,…,TN,按照公式(6-1)~(6-6)的表示形式,圖像復合變換的矩陣T可以表示為:T=TNTN-1…T1。第八十五頁,共一百二十六頁,編輯于2023年,星期二
1.復合平移設某個圖像先平移到新的位置P1(x1,y1)后,再將圖像平移到P2(x2,y2)的位置,則復合平移矩陣為由此可見,盡管一些順序的平移,用到矩陣的乘法,但最后合成的平移矩陣,只需對平移常量作加法運算。(6-7)第八十六頁,共一百二十六頁,編輯于2023年,星期二
2.復合比例同樣,對某個圖像連續(xù)進行比例變換,最后合成的復合比例矩陣,只要對比例常量作乘法運算即可。復合比例矩陣如下:(6-8)第八十七頁,共一百二十六頁,編輯于2023年,星期二
3.復合旋轉類似地,對某個圖像連續(xù)進行旋轉變換,最后合成的旋轉變換矩陣等于兩次旋轉角度的和,復合旋轉變換矩陣如下式所示:(6-9)第八十八頁,共一百二十六頁,編輯于2023年,星期二上述均為相對原點(圖像中央)作比例、旋轉等變換,如果要相對某一個參考點作變換,則要使用含有不同種基本變換的圖像復合變換。不同的復合變換,其變換過程不同,但是無論它的變換過程多么復雜,都可以分解成一系列基本變換。相應地,使用齊次坐標后,圖像復合變換的矩陣由一系列圖像基本幾何變換矩陣依次相乘而得到。下面通過一個例子討論含有不同種基本變換的圖像復合變換。第八十九頁,共一百二十六頁,編輯于2023年,星期二從6.2和6.5節(jié)的討論中可以看出,在進行圖像的比例縮放、圖像的旋轉變換時,整個變換過程由兩部分組成,即需要兩個獨立的算法。首先,需要一個算法來完成幾何變換本身,用它描述每個像素如何從其初始位置移動到終止位置;同時,還需要一個用于灰度級插值的算法。這是因為,在一般情況下,原始(輸入)圖像的位置坐標(x,y)為整數(shù),而變換后(輸出)圖像的位置坐標為非整數(shù),即產生“空穴”,反過來也是如此。因此,一般地,在進行圖像的幾何變換時,除了要進行其本身的幾何變換外,還要進行灰度級插值處理。第九十頁,共一百二十六頁,編輯于2023年,星期二灰度級插值處理可采用如下兩種方法。第一,可以把幾何變換想像成將輸入圖像的灰度一個一個像素地轉移到輸出圖像中。如果一個輸入像素被映射到四個輸出像素之間的位置,則其灰度值就按插值算法在四個輸出像素之間進行分配。把這種灰度級插值處理稱為像素移交(pixelcarryover)或稱為向前映射法,如圖6-30所示。另一種更有效的灰度級插值處理方法是像素填充(pixelfilling)或稱為向后映射算法。在這種算法中,輸出像素一次一個地映射回到原始(輸入)圖像中,以便確定其灰度級。如果一個輸出像素被映射到四個輸出像素之間,則其灰度值由灰度級插值決定,如圖6-30所示。向后空間變換是向前變換的逆變換。第九十一頁,共一百二十六頁,編輯于2023年,星期二圖6-30灰度級插值處理(像素變換)第九十二頁,共一百二十六頁,編輯于2023年,星期二在像素填充法中,變換后(輸出)圖像的像素通常被映射到原始(輸入)圖像中的非整數(shù)位置,即位于四個輸入像素之間。因此,為了決定與該位置相對應的灰度值,必須進行插值運算。最簡單的插值方法是零階插值或稱為最近鄰插值,也叫最近鄰域法,參見本書6.2節(jié)。一階插值或稱雙線性插值法和零階插值法相比可產生更令人滿意的效果,只是程序稍復雜一些,運行時間稍長一些。它的原理如圖6-10和圖6-31所示,插值計算公式參見6.2.1中的公式(6-2)。由于篇幅所限,雙線性插值公式的推導在此從略,有興趣的讀者請參考書后的參考文獻。第九十三頁,共一百二十六頁,編輯于2023年,星期二圖6-31雙線性插值第九十四頁,共一百二十六頁,編輯于2023年,星期二在這里還要說明一點,為了提高雙線性插值的速度,雙線性插值也可以分解為三個線性插值來實現(xiàn),公式如下:f(x,0)=f(0,0)+x[f(1,0)-f(0,0)]
f(x,1)=f(0,1)+x[f(1,1)-f(0,1)] (6-10)
f(x,y)=f(x,0)+y[f(x,1)-f(x,0)]
因為公式(6-2)需要用到四次乘法、八次加(或減)法運算,而公式(6-10)表示的第二種方法只需要三次乘法和六次加(或減)法,所以幾何變換程序一般選擇后者。從圖6-31也可以看出雙線性插值與最近鄰插值的區(qū)別。第九十五頁,共一百二十六頁,編輯于2023年,星期二在幾何運算中,雙線性灰度插值的平滑作用可能會使圖像的細節(jié)產生退化,尤其是在進行放大處理時,這種影響將更為明顯。而在其他應用中,雙線性插值的斜率不連續(xù)性會產生不希望得到的結果。這兩種情況都可以通過高階插值得到修正,當然這需要增加計算量。使用高階插值函數(shù)的例子有:三次樣條、Legendre中心函數(shù)和sin(αx)/α函數(shù)(即sin(αx)函數(shù))。高階插值常用卷積來實現(xiàn),這部分內容請讀者參考書后所附的參考文獻。第九十六頁,共一百二十六頁,編輯于2023年,星期二6.6.2圖像復合變換的示例圖6-32坐標系的平移第九十七頁,共一百二十六頁,編輯于2023年,星期二兩個坐標系之間的坐標變換矩陣表達式為:它的逆變換矩陣表達式是:第九十八頁,共一百二十六頁,編輯于2023年,星期二為了推導公式簡單起見,假設圖像未旋轉時中心坐標為(a,b),旋轉后中心坐標為(c,d)(在新的坐標系下旋轉后新圖像左上角為原點),則旋轉變換矩陣表達式為(6-11)第九十九頁,共一百二十六頁,編輯于2023年,星期二其逆變換表達式為(6-12)即(6-13)第一百頁,共一百二十六頁,編輯于2023年,星期二因此(6-14)公式(6-10)說明繞任意點(a,b)旋轉的幾何變換是由平移—旋轉—平移三個基本變換所構成,即先將坐標系平移到點(a,b),再進行旋轉,然后將旋轉后的圖像平移回原來的坐標原點。第一百零一頁,共一百二十六頁,編輯于2023年,星期二利用上面的轉換公式(6-12)~(6-14),就可以比較方便地編寫出實現(xiàn)圖像旋轉的VC++函數(shù)。首先應計算出公式中需要的幾個參數(shù):a,b,c,d和旋轉后新圖像的高、寬度。現(xiàn)在已知圖像的原始寬度為lWidth,高度為lHeight,以圖像中心為坐標系原點,則原始圖像四個角的坐標分別為第一百零二頁,共一百二十六頁,編輯于2023年,星期二按照旋轉公式(6-11)~(6-14),在旋轉后的新圖像中,這四個點坐標為第一百零三頁,共一百二十六頁,編輯于2023年,星期二則新圖像的寬度lNewWidth和高度lNewHeight為lNewWidth=max(|fDstX4-fDstY1|,|fDstX3-fDstY2|)lNewHeight=max(|fDstX4-fDstY1|,|fDstX3-fDstY2|)如果令(6-15)由已知及假設第一百零四頁,共一百二十六頁,編輯于2023年,星期二由公式(6-13)得(6-16)公式(6-16)、(6-17)便是圖像繞任意點(a,b)旋轉的變換公式,由此便可以編寫出實現(xiàn)該變換的VC++程序。事實上,只要先按上述公式計算出旋轉后新圖像的高度和寬度以及常數(shù)f1和f2,并按照公式(6-17)計算出變換后圖像上的點(i0,j0)://計算該像素在源DIB中的坐標i0=-((float)j)*fsina+((float)i)*fcosa+f2;j0=((float)j)*fcosa+((float)i)*fsina+f1;第一百零五頁,共一百二十六頁,編輯于2023年,星期二6.7透視變換6.7.1透視變換把三維物體或對象轉變?yōu)槎S圖形表示的過程稱為投影變換。根據(jù)視點(投影中心)與投影平面之間距離的不同,投影可分為平行投影和透視投影,透視投影即透視變換。平行投影的視點與投影平面之間的距離為無窮大,而對透視投影(變換),該距離是有限的。這個距離決定著透視投影的特性——透視縮小效應,即三維物體或對象透視投影的大小與形體到視點的距離成反比。例如,等長的兩直線段,都平行于投影面,但離投影中心近的線段,其透視投影大,而離投影中心遠的線段,透視投影小。這種效應所產生的視覺效果與照相機系統(tǒng)和人的視覺系統(tǒng)十分類似。與平行投影相比,透視投影的深度感更強,看上去更真實,但透視投影不能真實地反映物體的精確尺寸和形狀。第一百零六頁,共一百二十六頁,編輯于2023年,星期二對于透視投影,一束平行于投影面的平行線的投影可保持平行,而不平行于投影面的平行線的投影會聚集到一個點,這個點稱為滅點(VanishingPoint)。滅點可以看作是無限遠處的一點在投影面上的投影。透視投影的滅點可以有無限多個,不同方向的平行線在投影面上就能形成不同的滅點,坐標軸方向的平行線在投影面上形成的滅點又稱作主滅點。因為有x,y和z三個坐標軸,所以主滅點最多有3個。透視投影是按主滅點的個數(shù)來分類的,即按投影面與坐標軸的夾角來分類的,可分為一點透視、二點透視和三點透視,如圖6-33所示。第一百零七頁,共一百二十六頁,編輯于2023年,星期二圖6-33透視變換(a)一點透視;(b)二點透視;(c)三點透視第一百零八頁,共一百二十六頁,編輯于2023年,星期二下面討論一點透視。一點透視只有一個主滅點,即投影面與一個坐標軸正交,與另外兩個坐標軸平行,如圖6-33(a)所示。進行一點透視投影變換,要很好地考慮圖面布局,以避免三維形體或對象的平面域積聚成直線或直線積聚成點而影響直觀性。具體地說,就是要考慮下列幾點:①三維形體或對象與畫面(投影面)的相對位置;②視距,即視點與畫面的距離;③視點的高度。由此,假設視點在坐標原點,z坐標軸方向與觀察方向重合一致,三維形體或對象上某一點為P(x,y,z),一點透視變換后在投影面(觀察平面)UO′V上的對應點為P′(x′,y′,z′),投影面與z軸垂直,且與視點的距離為d,z軸過投影面窗口的中心,窗口是邊長為2S的正方形,如圖6-34所示。根據(jù)相似三角形對應邊成比例的關系,有:第一百零九頁,共一百二十六頁,編輯于2023年,星期二(6-18)利用齊次坐標,與二維幾何變換類似,將該過程寫成變換矩陣形式為(6-19)第一百一十頁,共一百二十六頁,編輯于2023年,星期二圖6-34一點透視變換第一百一十一頁,共一百二十六頁,編輯于2023年,星期二一般地,視點不在原點,投影平面是任意平面的情況,一點透視變換的矩陣也可以用一個4×4的矩陣表示。當根據(jù)公式(6-19)求出它的逆變換后,可以用VC++編寫一個實現(xiàn)圖像透視的程序,實現(xiàn)圖像的透視。第一百一十二頁,共一百二十六頁,編輯于2023年,星期二6.7.2其他變換如前所述,齊次坐標為確定各種基本變換和復合變換公式提供了一個簡單的方法。然而,在許多圖像處理與分析應用中,所需的幾何變換都相當復雜,甚至有些無法用簡便的數(shù)學式來表達。此外,所需幾何變換經常要從對實際圖像的測量中獲得,因此更希望用這些測量結果而不是函數(shù)形式來描述幾何變換。例如,在對由攝像機拍攝的有幾何畸變的圖像進行幾何校正時,首先應將一個矩形柵格目標數(shù)字化并顯示出來。因為攝像機中有幾何變形,所顯示的圖案不會是準確的矩形,因此所求幾何變換應能使其柵格圖案再次被復原為準確的矩形,從而修正了攝像機產生的畸變。采用同樣的幾何變換可用于校正同一攝像機生成的數(shù)字化圖像(假定畸變與景物無關),由此可得到不畸變的圖像。第一百一十三頁,共一百二十六頁,編輯于2023年,星期二圖像幾何變換的一個重要應用是消除由于攝像機導致的數(shù)字圖像的幾何畸變。當需要從數(shù)字圖像中得到定量的空間測量數(shù)據(jù)時,幾何校正被證明是十分重要的。某些圖像,例如,從衛(wèi)星上或飛機側視雷達上得到的圖像,都有相當嚴重的幾何變形,這些圖像需要先經過幾何校正,然后才能對其內容做出解釋。一些圖像系統(tǒng)使用非矩形的像素坐標,例如,極坐標、柱坐標、球面坐標等,用普通的顯示設備觀察這些圖像時,必須先對它們進行校正,也就是說,將其轉換為矩形像素坐標。例如,在油(水)井套管缺陷識別中,有時需要將極坐標系中的內窺鏡圖像轉換為直角坐標系中的圖像,然后進行分析與處理,如圖6-35、6-36所示。第一百一十四頁,共一百二十六頁,編輯于2023年,星期二圖6-35極坐標系中的內窺鏡圖像第一百一十五頁,共一百二十六頁,編輯于2023年,星期二圖6-36轉換為直角坐標系中的圖像第一百一十六頁,共一百二十六頁,編輯于2023年,星期二有時機器人的魚眼透
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026佛山市順德區(qū)容桂幸福陳占梅小學招募實習教師10人備考考試試題附答案解析
- 2026陜西西北工業(yè)大學自動化學院唐煒團隊招聘1人參考考試試題附答案解析
- 2026中國航空工業(yè)集團有限公司華東審計中心崗位招聘18人備考考試試題附答案解析
- 2026河南洛陽古都麗景控股集團有限公司招聘9人參考考試題庫附答案解析
- 2026湖南懷化溆浦縣衛(wèi)生健康局公益性崗位招聘備考考試試題附答案解析
- 2026西安未央湖社區(qū)衛(wèi)生服務中心招聘備考考試試題附答案解析
- 2026湖南長沙市芙蓉區(qū)定王臺街道社區(qū)衛(wèi)生服務中心招聘備考考試試題附答案解析
- 2026青海黃南藏族自治州藏醫(yī)院招聘3人參考考試試題附答案解析
- 2026廣東廣州市荔灣區(qū)東沙街環(huán)衛(wèi)站招聘辦公室管理員1人參考考試題庫附答案解析
- 首都醫(yī)科大學附屬北京安貞醫(yī)院南充醫(yī)院(南充市中心醫(yī)院)2025年第二批引進高層次人才公開考核招聘崗位調整備考考試題庫附答案解析
- 西湖龍井采購合同范本
- GB/T 2423.21-2025環(huán)境試驗第2部分:試驗方法試驗M:低氣壓
- 集團公司職業(yè)技能等級認定管理辦法
- 2024~2025學年四川省成都市武侯區(qū)九年級上學期期末語文試卷
- 2025年紫金礦業(yè)ai面試題目及答案
- 吸氧并發(fā)癥及護理措施
- 復發(fā)性叢集性頭痛
- 宮頸息肉個案護理
- 新生兒感染護理查房
- (二調)武漢市2025屆高中畢業(yè)生二月調研考試 生物試卷(含標準答案)
- 2024-2025學年天津市和平區(qū)高三上學期1月期末英語試題(解析版)
評論
0/150
提交評論