<listing id="vjp15"></listing><menuitem id="vjp15"></menuitem><var id="vjp15"></var><cite id="vjp15"></cite>
<var id="vjp15"></var><cite id="vjp15"><video id="vjp15"><menuitem id="vjp15"></menuitem></video></cite>
<cite id="vjp15"></cite>
<var id="vjp15"><strike id="vjp15"><listing id="vjp15"></listing></strike></var>
<var id="vjp15"><strike id="vjp15"><listing id="vjp15"></listing></strike></var>
<menuitem id="vjp15"><strike id="vjp15"></strike></menuitem>
<cite id="vjp15"></cite>
<var id="vjp15"><strike id="vjp15"></strike></var>
<var id="vjp15"></var>
<var id="vjp15"></var>
<var id="vjp15"><video id="vjp15"><thead id="vjp15"></thead></video></var>
<menuitem id="vjp15"></menuitem><cite id="vjp15"><video id="vjp15"></video></cite>
<var id="vjp15"></var><cite id="vjp15"><video id="vjp15"><thead id="vjp15"></thead></video></cite>
<var id="vjp15"></var>
<var id="vjp15"></var>
<menuitem id="vjp15"><span id="vjp15"><thead id="vjp15"></thead></span></menuitem>
<cite id="vjp15"><video id="vjp15"></video></cite>
<menuitem id="vjp15"></menuitem>

用于遙感影像局部校正的處理方法

文檔序號:6099076閱讀:359來源:國知局

專利名稱::用于遙感影像局部校正的處理方法
技術領域
:本發明涉及一種遙感影像的校正,具體說是一種用于遙感影像局部校正的處理方法。
背景技術
:衛星遙感影像的校正一直是遙感界十分關注和尚未完全解決的技術問題,特別是隨著IKONOS、QUICKBIRD和SPOT5等高分辨率的衛星數據應用的不斷深入,這一問題顯得尤為突出。我們知道高空間分辨率衛星一般飛行高度都較低,所獲取的數據容易受地形高差的影響,針對高分辨率衛星數據的正射校正,各種大的商業遙感軟件都提出了各自的校正模型,其思路都是利用各種衛星平臺參數,結合地面高程信息對影像進行校正,但仍無法實現影像數據和地形的完全配準,局部高差變化比較大的區域仍然存在偏差,常規的解決辦法是將存在偏差的區域裁出再進行校正,而后再將校正后的子區補回去,這樣做雖然可以勉強完成校正工作,但這樣做一是操作相當煩瑣,如果存在偏差的區域較多,這樣做起來需要花費很長的時間;二是調整后的子區與原圖像很難實現完好的拼接,局部存在線性條帶或者數據缺失;所以常規方法很難真正完成遙感影像和真實地形的完全配準,無法滿足實際的要求。技術方案本發明就是為了解決上述問題而提出的,本發明的目的在于提供一種操作簡單、遙感影像和真實地形的完全配準的遙感影像局部校正的處理方法。為達到上述目的,本發明采用的技術方案為用于遙感影像局部校正的處理方法,其特殊之處在于所述的方法包括以下步驟(1)、圖像輸入到計算機內;(2)、對待校正影像和基準影像進行疊加顯示;上述的疊加顯示過程中,R波段為待調整數據,G、B波段為作為基準影像的波段;(3)、根據基準影像對待校正影像進行實時交互調整;上述的交互調整過程中,通過利用表面樣條函數來實現實時交互調整,下面為對表面樣條函數的描述用戶在區域內通過鼠標拖拽可以確定像點調整前的N個控制點P1,P2,...,Pn的坐標(x1,y1),(x2,y2),...,(xn,yn)和調整后的坐標(x1’,y1’),(x2’,y2’),...,(xn’,yn’),在生成這一系列點(xi,yi)后,利用Goshtasby提出的表面樣條函數擬合方法可以有效地解決控制點精確吻合的問題;f(x,y)=a0+a1x&prime;+a2y&prime;+&Sigma;i=1NFiri2lnri2]]>式中ri2=(x′-xi′)2+(y-yi′)2通過下面線性方程組求解N+3個參數α0,α1,α2,Fi,i=1,2,...,N,式中Fi滿足下列條件&Sigma;i=1nFi=0,]]>&Sigma;i=1nxiFi=0,]]>&Sigma;i=1nyiFi=0]]>f(xj,yj)=a0+a1xj+a2yj+&Sigma;i=1NFirij2lnrij2]]>rij2=(xi-yj)2+(yi-yj)2,j=1,2,...,N,i&NotEqual;j]]>利用該函數可以保證用戶給定的各點被準確調整到指定的位置,而其它的像元則相應的平滑調整,從而實現圖像的完全配準。(4)、圖像輸出。上述過程的軟件開發語言為面向矩陣的用于數據可視化研究與應用開發的高級語言,是第四代可視化開發語言IDL(InteractiveDataLanguage)。本發明相對于現有技術,其優點如下1、直觀顯示通過對待調整影像和作為基準的影像(或地形圖)進行疊加顯示,R波段為待調整數據的一個波段,G、B波段為作為基準的數據的波段。兩幅數據中存在偏差的地方以重影顯示,這樣可以直觀的發現哪些地方存在偏差,便于進行實時的調整。2、實時調整對存在重影的區域,只要劃定一個調整范圍(可以用矩形、圓形或者自定義多邊形來進行劃定),在范圍內通過鼠標簡單的拖拽就可以實現調整,形象的說就像拉橡皮筋一樣的簡單,鼠標拖拽的像點(待校正影像)精確地移動到基準影像對應的像點,而在范圍內的其他點則根據與調整點的距離遠近進行不同程度的調整,區域外的點則保持不動。調整后的結果實時的顯示在操作窗口中,用戶可以馬上查看調整結果是否滿意,以便于進行下一步的調整。3、局部調整調整的對象不是整幅影像,而是存在偏差的一個個局部區域。在做調整時只會影響到區域內的影像,而區域外的區域不會有任何影響。區域內的調整也是一個漸變的調整,離調整點越近的區域調整幅度越大,越接近調整邊界的點調整幅度越小。4、操作簡便整個設計思路在IDL上編程實現,生成了一個非常實用簡便的工具。用戶無需去利用大型的專業遙感軟件來進行煩瑣的操作,只要簡單的幾個操作步驟就可以完成整個校正過程。5、實用性強該技術可以應用到各種生產處理不同類型的影像數據,用戶可以很簡便的選擇想要調整的數據子區,針對不同特征的重影,用戶可以設定調整區域的大小,并可以對影像進行反復的調整。非常實用,具有很強的推廣價值。圖1為本發明的流程原理圖;圖2為本發明的具體流程圖;圖3為影像調整前,道路之間存在嚴重的偏差的效果圖;圖4為影像調整后,道路已經完全套合的效果圖;圖5為影像調整前,山脊線間存在重影的效果圖;圖6為影像調整后,山脊線間重影消失的效果圖;具體實施方式在目前的生產實際中,高空間分辨率衛星由于飛行高度低,數據容易受地形高差的影響,特別是在海拔高度差異較大的山區,數據畸變尤為嚴重,所以高分辨率數據的正射校正為一個技術難題,目前通用的高分辨率衛星數據,如Ikonos、QuickBird和SPOT5數據,在進行正射校正方面,雖然各個大的圖象處理軟件都根據衛星的各種參數提出了校正模型,但在一些區域仍然完全與準確地形完全套合,存在局部偏差。另外SPOT5數據由于其多光譜波段和全色波段使用不同的傳感器,致使在同一區域獲得的數據難以完全套合,在數據的預處理中遇到了很多問題,特別是在做融合時,多光譜波段與全色波段難以配準,局部存在重影。為能消除影像數據中存在的局部偏差,在以標準數據作為基準的基礎上,開發出一種能對其局部進行及時調整的處理方法。本發明突破傳統的整體校正思路,從局部入手,對存在偏差的區域進行實時的交互式調整。首先將待校正的影像和作為基準的影像(或者地形圖)進行疊加顯示,這樣就可以直觀的看到哪些區域存在偏差,用戶只需在存在偏差的區域劃定一個調整范圍,而后在范圍內通過鼠標拖拽將待調整影像套合到基準影像(或者地形圖)上,調整結果實時的反映出來,如果認為滿意就將調整結果保存,如果覺得還不是很理想,你可以撤消本次調整,而后重新做調整。如此反復進行,直到得到一個理想的調整結果為止。在整個調整過程中,只是對選取范圍內的圖像進行調整,區域外的則沒有任何影響。選取一塊,調整一塊,最終可以實現整幅圖像與真實地形的完全套合。參見圖1,圖2,本發明的技術思路為用戶選擇輸入待調整的圖像和作為基準參考的圖像、圖形文件,作假彩色顯示,用R波段為待調整數據的一個波段,G、B波段為作為基準的數據的波段,存在偏差的地方會出現重影,用戶選擇有重影的區域,通過鼠標拖拽待校正圖像上的任一點到基準圖像相應的點上,就實現了這兩點完全配準,而區域內其他的點則跟著做不同程度的調整,離調整點越遠變動幅度越小,區域邊界則不做任何調整。當用戶認為調整結果滿意時,就保存并輸出;否則繼續調整,直到獲得一個滿意的校正結果。具體的開發步驟為第一步,首先,對該技術進行準確描述和界定。該技術的總體描述為對待校正影像和基準影像進行疊加顯示,對存在重影的區域進行區域選擇,而后在區域內利用鼠標拖拽來完成調整。該技術界定為常規校正方法的一個實用的補充。下面為該技術的總體框架。在整個技術框架中存在兩個技術難點一是如何對兩幅遙感影像進行疊加顯示,在目前的商業遙感軟件中均沒有該功能;二是如何實現交互調整,這是整個技術的核心和難點。第一個難點可以通過IDL編程來實現,比較容易實現。而第二個難點則需要自己進行建模實現。針對如何實現交互調整,通過利用表面樣條函數來實現核心模塊的開發。下面為對表面樣條函數的描述用戶在區域內通過鼠標拖拽可以確定像點調整前的N個控制點P1,P2,...,Pn的坐標(x1,y1),(x2,y2),...,(xn,yn)和調整后的坐標(x1’,y1’),(x2’,y2’),...,(xn’,yn’),在生成這一系列點(xi,yi)后,利用Goshtasby提出的表面樣條函數擬合方法可以有效地解決控制點精確吻合的問題。f(x,y)=a0+a1x&prime;+a2y&prime;+&Sigma;i=1NFiri2lnri2]]>式中ri2=(x′-xi′)2+(y-yi′)2通過下面線性方程組求解N+3個參數α0,α1,α2,Fi,i=1,2,...,N,式中Fi滿足下列條件&Sigma;i=1nFi=0,]]>&Sigma;i=1nxiFi=0,]]>&Sigma;i=1nyiFi=0]]>f(xj,yj)=a0+a1xj+a2yj+&Sigma;i=1NFirij2lnrij2]]>rij2=(xi-yj)2+(yi-yj)2,j=1,2,...,N,i&NotEqual;j]]>利用該函數可以保證用戶給定的各點被準確調整到指定的位置,而其它的像元則做一種平滑的調整,從而實現圖像的完全協調。第二步是對整個技術流程進行編程實現。開發語言選擇了第四代可視化開發語言IDL(InteractiveDataLanguage),該語言為面向矩陣的用于數據可視化研究與應用開發的高級語言,它在遙感圖像處理方面提供了很多實用的函數,而該模塊的核心其實是運用樣條函數對矩陣數據的重新定位,所以利用該語言編程實現比較容易。具體的開發步驟為1、研究待調整影像和基準影像的假彩色疊加顯示技術,并予以編程實現;2、研究并實施在遙感影像上各種邊界選擇方式(矩形選擇、圓形選擇和自定義多邊形選擇)的編程實現;3、研究模塊的核心部分,對表面樣條函數進行建模;4、對各個子模塊進行整合,完成該模塊的整體框架的搭建;5、編制使用說明,模塊打包,完成整個模塊的開發。在完成該技術的編程實現后,進行一系列的實用性測試。具體開發程序代碼<prelisting-type="program-listing"><![CDATA[;definethecommonblocsprow_common_definecommonlittle_common,base,afid,apos,adims,bfid,bpos,bdims,$oimager,oimage,rimager,rimage,draw0,draw1,swin,win0,win1,zoom,image_size,$offset,order,retain,doEvents,WID_TEXT_0,button,sizer,$  datar,datag,datab,x0,x1,y0,y1,WID_BASE_12,mode,flag,xy_pnts,roinpts,roixy,$  drag,n,junk,xx0,xx1,yy0,yy1,cpnts,ncpnts,dcolor,data,ss,$  data1,data2,data3,oimage1,oimage2,oimage3,rimage1,rimage2,riage3,$  fname,data_type,ns,nl,nb,interleave,scrollx,scrolly,imagex,imageyend;---------------------------------------------;---------------------------------------------;AddcornersandReturnsthenumberofcornerpoints(nn).prow_peopleCorners,nncommonlittle_common  ss=(size(roixy))[2]  fori=0,ss-1docpnts[*,i+ncpnts]=[roixy,roixy[1,i],roixy,roixy[1,i]]  nn=ncpnts+ss  ix=(!d.x_size-1)*  iy=(!d.y_size-1)*  fori=0,3docpnts=[ix[i],iy[i],ix[i],iy[i]]  nn=nn+3end;--------------------------------------------------;--------------------------------------------------;SetnewmodeandcleantheoldroiproW_CW_DEFROI_nmode,newcommonlittle_commonW_CW_DEFROI_DRAW,-1roinpts=0W_CW_DEFROI_DRAW,-1mode=newend;----------------------------------------------;----------------------------------------------;DrawtheoutlinePROW_CW_DEFROI_DRAW,icommonlittle_commonn=roinptsifnlt1thenreturnWSET,win1DEVICE,SET_GRAPHICS=6col=255WIDGET_CONTROL,xy_pnts,GET_UVALUE=xy,/NO_COPYxsave=!x.s&amp;ysave=!y.sp=float([!d.x_size,!d.y_size])f=/pq=[1,1]/p!x.s=[f,q]!y.s=[f[1],q[1]]ifnge2thenbegin  ifilt0thenplots,THICK=1.5,COLOR=col,xy[*,0:n-1]+.5$  elseplots,THICK=1.5,COLOR=col,xy[*,i:i+1]+.5ENDIFEMPTY!x.s=xsave&amp;!y.s=ysaveWIDGET_CONTROL,xy_pnts,SET_UVALUE=xy,/NO_COPYDEVICE,SET_GRAPHICS=3end;----------------------------------------------;----------------------------------------------;maineventhandlerprow_little_rectify_event,seventcommonlittle_common;Quittheapplicationusingthecloseboxif(TAG_NAMES(sEvent,/STRUCTURE_NAME)EQ$  ′WIDGET_KILL_REQUEST′)thenbegin  WIDGET_CONTROL,sEvent.top,/DESTROY  RETURNendif;inthescrollimagewindowif(sEvent.idEQdraw0)thenbegin  WIDGET_CONTROL,WID_TEXT_0,SET_VALUE=string(sevent.x,sevent.y,format=′("坐標:",i,",",i)′)  if((sEvent.pressAND1)NE0)thenbegin  roinpts=0  W_CW_DEFROI_DRAW,-1  widget_control,junk,sensitive=1  widget_control,WID_BASE_12,sensitive=0  flag=0  ncpnts=0  cpnts[*,*]=0  if(sizer[1]gesizer[2])thenrate=sizer[1]/256elserate=sizer[2]/256  centerx=fix(sevent.x*rate)  centery=fix((256-sevent.y)*rate)  x0=centerx-299  x1=centerx+300  y0=centery-299  y1=centery+300  ifx0le0thenbegin  x0=0  x1=599  endif  if(x1gesizer[1])thenbegin  x0=sizer[1]-600  x1=sizer[1]-1  endif  ify0le0thenbegin  y0=0  y1=599  endif  if(y1gesizer[2])thenbeginx=sevent.xy=sevent.yifsEvent.pressne0thendrag=[x,y]ifsevent.presseq1thenbutton=1ifsevent.releaseeq1thenbutton=0IF(modeeq1)or(modeeq2)thenbegin  ifbuttonthenbegin  ifngt0thenW_CW_DEFROI_draw,-1  t=drag  ifmodeeq1thenbegin  n=5  xy=[[t],[x,t[1]],[x,y],[t,y],[t]]  roixy=xy[*,0:3]  endifelsebegin  n=30  a=findgen(n+1)*(2*!pi/(n-1))  r=sqrt((float(x)-t)^2+(float(y)-t[1])^2)  xy=transpose([[t+r*cos(a)],[t[1]+r*sin(a)]])  roixy=fix(xy[*,0:28])  endelse  WIDGET_CONTROL,xy_pnts,SET_UVALUE=xy,/NO_COPY  roinpts=n  W_CW_DEFROI_draw,-1  endifreturnENDIFif(sEvent.presseq0)thenreturnWIDGET_CONTROL,xy_pnts,GET_UVALUE=xy,/NO_COPYifn_elements(xy)le1thenxy=intarr(2,100)ifngt0thenifxeqxyandyeqxy[1,n-1]then$  WIDGET_CONTROL,xy_pnts,SET_UVALUE=xy,/NO_COPYif(n+1)gen_elements(xy)/2thenxy=[[xy],[intarr(2,n)]]xy=xxy[1,n]=yn=n+1roinpts=nroixy=xy[*,0:n-1]y0=sizer[2]-600  y1=sizer[2]-1  endif  ;displayimageintheoriginalimagewindow  wset,win1  erase  oimager=datar[x0:x1,y0:y1]  oimageg=datag[x0:x1,y0:y1]  oimageb=datab[x0:x1,y0:y1]  oimage[*,*,0]=oimager  oimage[*,*,1]=oimageg  oimage[*,*,2]=oimageb  rimager=oimager  rimage=oimage  tv,oimage,true=3,order=order  ifnbge2thenbegin  oimage1=data1[x0:x1,y0:y1]  rimage1=oimage1  endif  ifnbge3thenbegin  oimage2=data2[x0:x1,y0:y1]    rimage2=oimage2  endif  ifnbge4thenbegin  oimage3=data3[x0:x1,y0:y1]  rimage3=oimage3  endif  endif  returnendif;intheoriginalinagewindowif(sEvent.idEQdraw1)thenbegin  wset,win1  WIDGET_CONTROL,WID_TEXT_0,SET_VALUE=string(sevent.x,sevent.y,format=′("坐標:",i,",",i)′)  ;detectifdorectifing  ifflageq0thenbegin  if(sevent.xlt0)or(sevent.ylt0)or$  (sevent.xge599)or(sevent.yge599)thenreturnWIDGET_CONTROL,xy_pnts,SET_UVALUE=xy,/NO_COPY  ifmodeeq0thenbegin  ifnge2then$  W_CW_DEFROI_draw,n-2  endifelsebegin  W_CW_DEFROI_draw,n-1  endelse  returnendifelsebegin  dcolor=255;inthelittlerectifymodule;Handlebuttonpress.  if((sEvent.pressAND1)NE0)thenbegin  if(buttonEQ1)thenRETURN  DEVICE,SET_GRAPHICS=6  xx1=(xx0=sEvent.x)  yy1=(yy0=sEvent.y)  button=1  RETURN  endif  ;Handlebuttonrelease.  if((sEvent.releaseand1)NE0)thenbegin  PLOTS,[xx0,xx1],[yy0,yy1],COLOR=dcolor,/DEVICE  arrow,xx0,yy0,xx1,yy1,COLOR=dcolor  DEVICE,SET_GRAPHICS=3  button=0  ;將每次的調整值記錄在數組cpnts中  cpnts=[xx0,yy0,xx1,yy1]  ncpnts=ncpnts+1  ;將圖象的角點存入數組cpnts中,并計算參與運算的角點個數  w_peopleCorners,nn  ;設置顯示的楨數,這里設置為2  nframes=2  ;調用三角網校正模型進行校正  cpx=cpnts  cpy=cpnts[1,ncpnts-1:nn]x=cpnts[2,ncpnts-1:nn]  y=cpnts[3,ncpnts-1:nn]  rimager=WARP_TRI(x,600-y,cpx,600-cpy,rimager)  ifnbge2thenrimage1=WARP_TRI(x,600-y,cpx,600-cpy,rimage1)  ifnbge3thenrimage2=WARP_TRI(x,600-y,cpx,600-cpy,rimage2)  ifnbge4thenrimage3=WARP_TRI(x,600-y,cpx,600-cpy,rimage3)  rimage[*,*,0]=rimager  tv,rimage,true=3,order=order  W_CW_DEFROI_draw,-1  RETURN  endif  ;Handlebuttonmotion.  if(button)thenbegin  PLOTS,[xx0,xx1],[yy0,yy1],COLOR=dcolor,/DEVICE  xx1=sEvent.x>0<(!dx_size-1)  yy1=sEvent.y>0<(!d.y_size-1)  PLOTS,[xx0,xx1],[yy0,yy1],COLOR=dcolor,/DEVICE  RETURN  endif  RETURN  endelsereturnendifelsebegin  WIDGET_CONTROL,sEvent.top,/HOURGLASS  WIDGET_CONTROL,sEvent.id,GET_UVALUE=b  if(bEQ′CW′)thenb=sEvent.value  casebof  ′打開...′:begin  ENVI_SELECT,fid=afid,pos=apos,dims=adims,/file_only,title=′選擇待調整影像文件′  if(afideq-1)thenreturn  ENVI_FILE_QUERY,afid,ns=ns,nl=nl,nb=nb,$  fname=fname,data_type=data_type,$  interleave=interleave,offset=offset  ;readtheoriginalimagebandsintovariables  datar=ENVI_GET_DATA(fid=afid,dims=adims,pos=apos)  ifnbge2thendata1=ENVI_GET_DATA(fid=afid,dims=adims,pos=apos[1])  ifnbge3thendata2=ENVI_GET_DATA(fid=afid,dims=adims,pos=apos[2])  ifnbge4thendata3=ENVI_GET_DATA(fid=afid,dims=adims,pos=apos[3]);computetheXandYsizeofthescrollimagewindowsizer=size(datar)ifsizer[1]eqsizer[2]thenbegin  scrollx=256  scrolly=256endifelsebeginifsizer[1]gesizer[2]thenbegin  scrollx=256  scrolly=fix(sizer[2]/(sizer[1]/256))endifelsebegin  scrollx=fix(sizer[1]/(sizer[2]/256))  scrolly=256endelseendelse;computetheXandYsizeoftheoriginalimagewindowimagex=600imagey=600ifsizer[1]le600thenimagex=sizer[1]ifsizer[2]le600thenimagey=sizer[2];selectthebaseimageENVI_SELECT,fid=bfid,pos=bpos,dims=bdims,/band_only,title=′選擇基準影像′if(bfideq-1)thenreturndatab=(datag=ENVI_GET_DATA(fid=bfid,dims=bdims,pos=bpos))SWIN=!D.WINDOW;displaythescrollimagesimager=congrid(datar,scrollx,scrolly)simageg=congrid(datag,scrollx,scrolly)simageb=congrid(datab,scrollx,scrolly)simage=intarr(scrollx,scrolly,3)simage[*,*,0]=simagersimage[*,*,1]=simagegsimage[*,*,2]=simagebwset,win0TV,simage,true=3,order=order;displaytheoriginalimagewset,win1oimager=dataroimageg=datagoimageb=databoimage=intarr(imagex,imagey,3)oimage[*,*,0]=oimageroimage[*,*,1]=oimagegoimage[*,*,2]=oimagebtv,oimage,true=3,order=orderrimager=oimagerrimage=oimageifnbge2thenbegin  oimage1=data1  rimage1=oimage1  endif  ifnbge3thenbegin  oimage2=data2  rimage2=oimage2  endif  ifnbge4thenbegin  oimage3=data3  rimage3=oimage3  endif  WSET,SWINendcase′保存′:begin  openw,lun,fname,/get_lun  writeu,lun,datar  ifnbge2thenwriteu,lun,data1  ifnbge3thenwriteu,lun,data2  ifnbge4thenwriteu,lun,data3  free_lun,lun  envi_setup_head,fname=fname,ns=ns,nl=nl,nb=nb,$  data_type=data_type,offset=offset,interleave=interleave,/write,/open  ;envi_tile_done,tile_idendcase′另存為...′:begin  outfile=Dialog_Pickfile(Path=current,/NoConfirm,Get_Path=path,Filter=[′*.*′],$  title=′文件另存為...′)  IFoutfileNE"THENBEGIN  openw,lun,outfile,/get_lun  writeu,lun,datar  ifnbge2thenwriteu,lun,data1  ifnbge3thenwriteu,lun,data2ifnbge4thenwriteu,lun,data3  free_lun,lun  envi_setup_head,fname=outfile,ns=ns,nl=nl,nb=nb,$  datatype=data_type,offset=offset,interleave=interleave,/write,/open  ENDIFendcase′多邊形選擇′:W_CW_DEFROI_nmode,0′矩形選擇′:W_CW_DEFROI_nmode,1′圓形選擇′:W_CW_DEFROI_nmode,2′范圍選擇′:begin  widget_control,junk,sensitive=1  widget_control,WID_BASE_12,sensitive=0  flag=0  widget_control,junk,SET_VALUE=0  W_CW_DEFROI_nmode,0endcase′影像微調′:begin  widget_control,junk,sensitive=0  widget_control,WID_BASE_12,sensitive=1  flag=1endcase′調整′:begin  datar[x0:x1,y0:y1]=imager  ifnbge2thendata1[x0:x1,y0:y1]=rimage1  ifnbge3thendata2[x0:x1,y0:y1]=rimage2  ifnbge4thendata3[x0:x1,y0:y1]=rimage3endcase′撤消′:begin  if(ncpntsEQ0)thenreturn  ;對最近的調整結果進行反向調整  nn=ncpnts+3+ss  cpx=cpnts  cpy=cpnts[1,ncpnts-1:nn]  x=cpnts[2,ncpnts-1:nn]  y=cpnts[3,ncpnts-1:nn]  rimager=WARP_TRI(cpx,600-cpy,x,600-y,rimager)  ifnbge2thenrimage1=WARP_TRI(cpx,600-cpy,x,600-y,rimage1)  ifnbge3thenrimage2=WARP_TRI(cpx,600-cpy,x,600-y,rimage2)  ifnbge4thenrimage3=WARP_TRI(cpx,600-cpy,x,600-y,rimage3)  rimage[*,*,0]=rimager  tv,rimage,true=3,order=order  W_CW_DEFROI_draw,-1;對數組cpnts進行更新  fori=ncpnts,nndocpnts=cpnts  cpnts=  ncpnts=ncpnts-1  endcase  ′重置′:begin  tv,oimage,true=3,order=order  W_CW_DEFROI_DRAW,-1  rimager=oimager  ifnbge2thenrimage1=oimage1  ifnbge3thenrimage2=oimage2  ifnbge4thenrimage3=oimage3  rimage=oimage  fori=0,ncpnts-1dobegin  cpnts=  endfor  ncpnts=0  endcase  ′退出′:WIDGET_CONTROL,sEvent.top,/DESTROY  ′關于littlerectify′:begin  spawn,′D:\RSI\IDL60\products\envi40\save_add\text\help.doc′,/hide  ;spawn,′C:\WINNT\clock.avi′,/hide  endcaseendcaseendelseend;----------------------------------------------------------;----------------------------------------------------------;PurposeCleanupprocedure.Prow_little_rectify_cleanup,wTopBase  WIDGET_CONTROL,wTopBase,GET_UVALUE=sState,/No_Copy  TVLCT,sState.previouscolorTable  commonlittle_common  oimager=0  oimage=0end;----------------------------------------------------------;----------------------------------------------------------;mainproceduredefineprow_little_rectify,eventcommonlittle_commongroup=0L;initialassociatedvriableRETAIN=2button=0order=1mode=0flag=0roinpts=0Ln=0drag=ncpnts=0cpnts=fltarr(4,100);selecttheoriginalimagetorectifyENVI_SELECT,fid=afid,pos=apos,dims=adims,/file_only,title=′選擇待調整影像文件′if(afideq-1)thenreturnENVI_FILE_QUERY,afid,ns=ns,nl=nl,nb=nb,$fname=fname,data_type=data_type,$interleave=interleave,offset=offset;readtheoriginalimagebandsintovariablesdatar=ENVI_GET_DATA(fid=afid,dims=adims,pos=apos)ifnbge2thendata1=ENVI_GET_DATA(fid=afid,dims=adims,pos=apos[1])ifnbge3thendata2=ENVI_GET_DATA(fid=afid,dims=adims,pos=apos[2])ifnbge4thendata3=ENVI_GET_DATA(fid=afid,dims=adims,pos=apos[3]);computetheXandYsizeofthescrollimagewindowsizer=size(datar)ifsizer[1]eqsizer[2]thenbegin  scrollx=256  scrolly=256endifelsebegin  ifsizer[1]gesizer[2]thenbegin  scrollx=256  scrolly=fix(sizer[2]/(sizer[1]/256))endifelsebegin  scrollx=fix(sizer[1]/(sizer[2]/256))  scrolly=256  endelseendelse;computetheXandYsizeoftheoriginalimagewindowimagex=600imagey=600ifsizer[1]le600thenimagex=sizer[1]ifsizer[2]le600thenimagey=sizer[2];selectthebaseimageENVI_SELECT,fid=bfid,pos=bpos,dims=bdims,/band_only,title=′選擇基準影像′if(bfideq-1)thenreturndatab=(datag=ENVI_GET_DATA(fid=bfid,dims=bdims,pos=bpos))SWIN=!D.WINDOW;GetthecurrentcolortableTVLCT,savedR,savedG,savedB,/GETpreviousColorTable=[[savedR],[savedG],[savedB]];Createthewidgetsbase=Widget_Base(GROUP_LEADER=wGroup,UVALUE=′base′$  ,XOFFSET=50,YOFFSET=50,SCR_XSIZE=890,SCR_YSIZE=660$  ,TITLE=′littlerectify′,SPACE=3,XPAD=3,YPAD=3$  ,TLB_FRAME_ATTR=1,MBAR=base_MBAR)WID_BASE_1=Widget_Base(base,UVALUE=′WID_BASE_1′,XOFFSET=6$  ,YOFFSET=2,SCR_XSIZE=260,SCR_YSIZE=330,TITLE=′IDL′,SPACE=3$  ,XPAD=3,YPAD=3,frame=1)WID_BUTTON_21=Widget_Button(WID_BASE_1,UVALUE=′范圍選擇′$  ,XOFFSET=12,YOFFSET=6,SCR_XSIZE=106,SCR_YSIZE=25$  ,/ALIGN_CENTER,VALUE=′范圍選擇′)WID_BUTTON_13=Widget_Button(WID_BASE_1,UVALUE=′影像微調′$  ,XOFFSET=132,YOFFSET=6,SCR_XSIZE=106,SCR_YSIZE=25$  ,/ALIGN_CENTER,VALUE=′影像微調′)WID_BASE_6=Widget_Base(WID_BASE_1,UVALUE=′WID_BASE_6′,FRAME=1$  ,XOFFSET=14,YOFFSET=40,SCR_XSIZE=227,SCR_YSIZE=100$  ,TITLE=′IDL′,SPACE=3,XPAD=3,YPAD=3)junk=CW_BGROUP(WID_BASE_6,/column,/EXCLUSIVE,/NO_REL,/RETURN_NAME,UVALUE=CW′,$  [′多邊形選擇′,′矩形選擇′,′圓形選擇′],SET_VALUE=0,XOFFSET=3,YOFFSET=6)WID_BASE_12=Widget_Base(WID_BASE_1,UVALUE=′WID_BASE_12′,FRAME=1$  ,XOFFSET=14,YOFFSET=148,SCR_XSIZE=227,SCR_YSIZE=75$  ,TITLE=′IDL′,SPACE=3,XPAD=3,YPAD=3,sensitive=0)WID_BUTTON_14=Widget_Button(WID_BASE_12,UVALUE=′調整′$  ,XOFFSET=24,YOFFSET=11,SCR_XSIZE=76,SCR_YSIZE=22$  ,/ALIGN_CENTER,VALUE=′調整′)WID_BUTTON_18=Widget_Button(WID_BASE_12,UVALUE=′撤消′$  ,XOFFSET=123,YOFFSET=11,SCR_XSIZE=76,SCR_YSIZE=22$  ,/ALIGN_CENTER,VALUE=′撤消′)WID_BUTTON_19=Widget_Button(WID_BASE_12,UVALUE=′退出′$  ,XOFFSET=122,YOFFSET=40,SCR_XSIZE=76,SCR_YSIZE=22$  ,/ALIGN_CENTER,VALUE=′退出′)WID_BUTTON_20=Widget_Button(WID_BASE_12,UVALUE=′重置′$  ,XOFFSET=23,YOFFSET=40,SCR_XSIZE=76,SCR_YSIZE=22$  ,/ALIGN_CENTER,VALUE=′重置′)WID_TEXT_0=Widget_Text(WID_BASE_1,UVALUE=′WID_TEXT_0′,FRAME=1$  ,XOFFSET=15,YOFFSET=238,SCR_XSIZE=229,SCR_YSIZE=26,VALUE=[$  ′當前坐標:′],XSIZE=20,YSIZE=1)xy_pnts=Widget_Text(WID_BASE_1,UVALUE=0,XOFFSET=15$  ,YOFFSET=270,SCR_XSIZE=229,SCR_YSIZE=56,VALUE=[$  ′請先進行調整范圍選擇,而后點擊′,′‘影像微’調按扭進行調整!′]$  ,XSIZE=20,YSIZE=8);initialthedrawwidgetdoEvents=(retaineq20:1)if(sizereq0)thendoEvents=0WID_BASE_2=Widget_Base(base,UVALUE=′WID_BASE_2′,FRAME=1$  ,XOFFSET=276,YOFFSET=1,SCR_XSIZE=604,SCR_YSIZE=604$  ,TITLE=′IDL′,SPACE=3,XPAD=3,YPAD=3)draw1=Widget_Draw(WID_BASE_2,retain=retain,XOFFSET=1,YOFFSET=1,UVALUE=′draw1′$  ,SCR_XSIZE=imagex,SCR_YSIZE=imagey,$expose_events=doEvents,viewport_events=doEvents,/MOTION_EVENTS,/BUTTON_EVENTS)WID_BASE_4=Widget_Base(base,UVALUE=′WID_BASE_4′,FRAME=1$  ,XOFFSET=6,YOFFSET=335,SCR_XSIZE=260,SCR_YSIZE=260$  ,TITLE=′IDL′,SPACE=3,XPAD=3,YPAD=3)draw0=Widget_Draw(WID_BASE_4,retain=retain,UVALUE=′draw0′,XOFFSET=1$  ,YOFFSET=1,XSIZE=scrollx,YSIZE=scrolly,expose_events=doEvents,/MOTION_EVENTS,/BUTTON_EVENTS);definethemenuofbasewidgetW_MENU_0=Widget_Button(base_MBAR,UVALUE=′W_MENU_0′,/MENU,VALUE=′文件′)W_MENU_3=Widget_Button(W_MENU_0,UVALUE=′打開...',VALUE=′打開...′)W_MENU_9=Widget_Button(W_MENU_0,UVALUE=′保存′,VALUE=′保存′,/separator)W_MENU_11=Widget_Button(W_MENU_0,UVALUE=′另存為...′,VALUE=′另存為...′)W_MENU_10=Widget_Button(W_MENU_0,UVALUE=′退出′,/SEPARATOR,VALUE=′退出′)W_MENU_12=Widget_Button(base_MBAR,UVALUE=′W_MENU_12′,/MENU,VALUE=′幫助′)W_MENU_13=Widget_Button(W_MENU_12,UVALUE=′關于littlerectify′,VALUE=′關于littlerectify′)Widget_Control,/REALIZE,baseWIDGET_CONTROL,draw0,GET_VALUE=win0WIDGET_CONTROL,draw1,GET_VALUE=win1;displaythescrollimagesimager=congrid(datar,scrollx,scrolly)simageg=congrid(datag,scrollx,scrolly)simageb=congrid(datab,scrollx,scrolly)simage=intarr(scrollx,scrolly,3)simage[*,*,0]=simagersimage[*,*,1]=simagegsimage[*,*,2]=simagebwset,win0TV,simage,true=3,order=order;displaytheoriginalimagewset,win1oimager=dataroimageg=datagoimageb=databoimage=intarr(imagex,imagey,3)oimage[*,*,0]=oimageroimage[*,*,1]=oimagegoimage[*,*,2]=oimagebtv,oimage,true=3,order=orderrimager=oimagerrimage=oimageprint,nbifnbge2thenbegin  oimage1=data1  rimage1=oimage1endififnbge3thenbegin  oimage2=data2  rimage2=oimage2endififnbge4thenbegin  oimage3=data3  rimage3=oimage3endifWSET,SWIN;CreatethestatestructuresState={previousColorTable:previousColorTable,$  groupBase:group}WIDGET_CONTROL,base,SET_UVALUE=sState,/NO_COPYXManager,′w_little_rectify′,base,EVENT_HANDLER=′w_little_rectify_event′,$  CLEANUP=′w_little_rectify_cleanup′,/NO_BLOCKend]]></pre>參見圖3、圖4、圖5、圖6,本發明選取的試驗數據為SPOT5多光譜數據和全色數據這兩種數據,由于這兩種數據為不同的傳感器所獲取,在做數據融合時很難實現完全套合,下面為使用該技術進行校正的結果和原始數據的比較的。權利要求1.用于遙感影像局部校正的處理方法,其特征在于所述的方法包括以下步驟(1)、圖像輸入到計算機內;(2)、對待校正影像和基準影像進行疊加顯示;上述的疊加顯示過程中,R波段為待調整數據,G、B波段為作為基準影像的波段;(3)、根據基準影像對待校正影像進行實時交互調整;上述的交互調整過程中,通過利用表面樣條函數來實現實時交互調整,下面為對表面樣條函數的描述用戶在區域內通過鼠標拖拽可以確定像點調整前的N個控制點P1,P2,...,Pn的坐標(x1,y1),(x2,y2),...,(xn,yn)和調整后的坐標(x1’,y1’),(x2’,y2’),...,(xn’,yn’),在生成這一系列點(xi,yi)后,利用Goshtasby提出的表面樣條函數擬合方法可以有效地解決控制點精確吻合的問題;f(x,y)=a0+a1x&prime;+a2y&prime;+&Sigma;i=1NFiri2lnri2]]>式中ri2=(x′-xi′)2+(y-yi′)2通過下面線性方程組求解N+3個參數α0,α1,α2,Fi,i=1,2,...,N,式中Fi滿足下列條件&Sigma;i=1nFi=0,&Sigma;i=1nxiFi=0,&Sigma;i=1nyiFi=0]]>f(xj,yj)=a0+a1xj+a2yj+&Sigma;i=1NFirij2lnrij2]]>rij2=(xi-yi)2+(yi-yi)2]]>j=1,2,...,Ni≠j利用該函數可以保證用戶給定的各點被準確調整到指定的位置,而其它的像元則相應的平滑調整,從而實現圖像的完全配準。(4)、圖像輸出。2.根據權利要求1所述的用于遙感影像局部校正的處理方法,其特征在于上述過程的軟件開發語言為面向矩陣的用于數據可視化研究與應用開發的高級語言,是第四代可視化開發語言IDL(InteractiveDataLanguage)。全文摘要本發明涉及一種以航天、航空遙感圖像作為主要信息源,調整常規假彩色合成中圖像色彩失真的處理方法。在現有技術中,一般都有相應的色彩調整模塊,這些模塊都是依據圖像統計特征進行的,在使用多景圖像制作鑲嵌圖時,要把不同季節的圖像色彩調整一致,并且保持各類地物本色幾乎不可能。本發明的是研究圖像上地物的光譜特征,尋找各類主要地物在光譜特征上的差異;然后量化和比較特征差異,用邏輯表達式描述這種差異,建立相互關系數學模型,通過輸入這些模型,用于自動識別需要調整目標,根據彩色原理,調整目標象元的相應數值,重點調整水體、植被等,達到改變視覺效果,達到亂真的目的,同時保證其它地物的色彩不變,使得合成圖像逼近自然色彩。文檔編號G01S7/48GK1831555SQ20051004178公開日2006年9月13日申請日期2005年3月10日優先權日2005年3月10日發明者王政偉,萬余慶申請人:中國煤炭地質總局航測遙感局
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
韩国伦理电影