CN1831555A - 用于遥感影像局部校正的处理方法 - Google Patents
用于遥感影像局部校正的处理方法 Download PDFInfo
- Publication number
- CN1831555A CN1831555A CN 200510041783 CN200510041783A CN1831555A CN 1831555 A CN1831555 A CN 1831555A CN 200510041783 CN200510041783 CN 200510041783 CN 200510041783 A CN200510041783 A CN 200510041783A CN 1831555 A CN1831555 A CN 1831555A
- Authority
- CN
- China
- Prior art keywords
- image
- sigma
- adjusted
- adjustment
- remote sensing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Image Processing (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明涉及一种以航天、航空遥感图像作为主要信息源,调整常规假彩色合成中图像色彩失真的处理方法。在现有技术中,一般都有相应的色彩调整模块,这些模块都是依据图像统计特征进行的,在使用多景图像制作镶嵌图时,要把不同季节的图像色彩调整一致,并且保持各类地物本色几乎不可能。本发明的是研究图像上地物的光谱特征,寻找各类主要地物在光谱特征上的差异;然后量化和比较特征差异,用逻辑表达式描述这种差异,建立相互关系数学模型,通过输入这些模型,用于自动识别需要调整目标,根据彩色原理,调整目标象元的相应数值,重点调整水体、植被等,达到改变视觉效果,达到乱真的目的,同时保证其它地物的色彩不变,使得合成图像逼近自然色彩。
Description
技术领域
本发明涉及一种遥感影像的校正,具体说是一种用于遥感影像局部校正的处理方法。
背景技术
卫星遥感影像的校正一直是遥感界十分关注和尚未完全解决的技术问题,特别是随着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提出的表面样条函数拟合方法可以有效地解决控制点精确吻合的问题;
式中ri 2=(x′-xi′)2+(y-yi′)2
通过下面线性方程组求解N+3个参数α0,α1,α2,Fi,i=1,2,...,N,式中Fi满足下列条件:
利用该函数可以保证用户给定的各点被准确调整到指定的位置,而其它的像元则相应的平滑调整,从而实现图像的完全配准。
(4)、图像输出。
上述过程的软件开发语言为面向矩阵的用于数据可视化研究与应用开发的高级语言,是第四代可视化开发语言IDL(InteractiveData Language)。
本发明相对于现有技术,其优点如下:
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提出的表面样条函数拟合方法可以有效地解决控制点精确吻合的问题。
式中ri 2=(x′-xi′)2+(y-yi′)2
通过下面线性方程组求解N+3个参数α0,α1,α2,Fi,i=1,2,...,N,式中Fi满足下列条件:
利用该函数可以保证用户给定的各点被准确调整到指定的位置,而其它的像元则做一种平滑的调整,从而实现图像的完全协调。
第二步是对整个技术流程进行编程实现。开发语言选择了第四代可视化开发语言IDL(Interactive Data Language),该语言为面向矩阵的用于数据可视化研究与应用开发的高级语言,它在遥感图像处理方面提供了很多实用的函数,而该模块的核心其实是运用样条函数对矩阵数据的重新定位,所以利用该语言编程实现比较容易。
具体的开发步骤为:
1、研究待调整影像和基准影像的假彩色叠加显示技术,并予以编程实现;
2、研究并实施在遥感影像上各种边界选择方式(矩形选择、圆形选择和自定义多边形选择)的编程实现;
3、研究模块的核心部分,对表面样条函数进行建模;
4、对各个子模块进行整合,完成该模块的整体框架的搭建;
5、编制使用说明,模块打包,完成整个模块的开发。
在完成该技术的编程实现后,进行一系列的实用性测试。
具体开发程序代码:
;define the common blocs pro w_common_define common little_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,imagey end ;--------------------------------------------- ;--------------------------------------------- ;Add corners and Returns the number of corner points(nn). pro w_peopleCorners,nn common little_common ss=(size(roixy))[2] for i=0,ss-1do cpnts[*,i+ncpnts]=[roixy[0,i],roixy[1,i],roixy[0,i],roixy[1,i]] nn=ncpnts+ss ix=(!d.x_size-1)*[0,1,1,0] iy=(!d.y_size-1)*[0,0,1,1] for i=0,3 do cpnts[0,i+nn]=[ix[i],iy[i],ix[i],iy[i]] nn=nn+3 end ;-------------------------------------------------- ;-------------------------------------------------- ;Set new mode and clean the old roi pro W_CW_DEFROI_nmode,new common little_common W_CW_DEFROI_DRAW,-1 roinpts=0 W_CW_DEFROI_DRAW,-1 mode=new <dp n="d8"/> end ;---------------------------------------------- ;---------------------------------------------- ;Draw the outline PRO W_CW_DEFROI_DRAW,i common little_common n=roinpts if n lt 1 then return WSET,win1 DEVICE,SET_GRAPHICS=6 col=255 WIDGET_CONTROL,xy_pnts,GET_UVALUE=xy,/NO_COPY xsave=!x.s & ysave=!y.s p=float([!d.x_size,!d.y_size]) f=[0,0]/p q=[1,1]/p !x.s=[f[0],q[0]] !y.s =[f[1],q[1]] if n ge 2 then begin if i lt 0 then plots,THICK=1.5,COLOR=col,xy[*,0:n-1]+.5$ else plots,THICK=1.5,COLOR=col,xy[*,i:i+1]+.5 ENDIF EMPTY !x.s=xsave &!y.s=ysave WIDGET_CONTROL,xy_pnts,SET_UVALUE=xy,/NO_COPY DEVICE,SET_GRAPHICS=3 end ;---------------------------------------------- ;---------------------------------------------- ;main event handler pro w_little_rectify_event,sevent common little_common <dp n="d9"/> ;Quit the application using the close boxif(TAG_NAMES(sEvent,/STRUCTURE_NAME)EQ$ ′WIDGET_KILL_REQUEST′)then begin WIDGET_CONTROL,sEvent.top,/DESTROY RETURN endif ;in the scroll image window if(sEvent.id EQ draw0)then begin WIDGET_CONTROL,WID_TEXT_0,SET_VALUE=string(sevent.x,sevent.y,format=′("坐 标:",i,",",i)′) if((sEvent.press AND 1)NE 0)then begin 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]ge sizer[2])then rate=sizer[1]/256 else rate=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 if x0 le 0 then begin x0=0 x1=599 endif if(x1 ge sizer[1])then begin x0=sizer[1]-600 x1=sizer[1]-1 endif if y0 le 0 then begin y0=0 y1=599 endif if(y1 ge sizer[2])then begin <dp n="d10"/> x=sevent.x y=sevent.y if sEvent.press ne 0 then drag=[x,y] if sevent.press eq 1 then button=1 if sevent.release eq 1 then button=0 IF(mode eq 1)or(mode eq 2)then begin if button then begin if n gt 0 then W_CW_DEFROI_draw,-1 t=drag if mode eq 1 then begin n=5 xy=[[t],[x,t[1]],[x,y],[t[0],y],[t]] roixy=xy[*,0:3] endif else begin n=30 a=findgen(n+1)*(2*!pi/(n-1)) r=sqrt((float(x)-t[0])^2+(float(y)-t[1])^2) xy=transpose([[t[0]+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 endif return ENDIF if(sEvent.press eq 0)then return WIDGET_CONTROL,xy_pnts,GET_UVALUE=xy,/NO_COPY if n_elements(xy)le 1 then xy=intarr(2,100) if n gt 0 then if x eq xy[0,n-1]and y eq xy[1,n-1]then$ WIDGET_CONTROL,xy_pnts,SET_UVALUE=xy,/NO_COPY if(n+1)ge n_elements(xy)/2 then xy=[[xy],[intarr(2,n)]] xy[0,n]=x xy[1,n]=y n=n+1 roinpts=n roixy=xy[*,0:n-1] <dp n="d11"/> y0=sizer[2]-600 y1=sizer[2]-1 endif ;display image in the original image window 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 if nb ge 2 then begin oimage1=data1[x0:x1,y0:y1] rimage1=oimage1 endif if nb ge 3 then begin oimage2=data2[x0:x1,y0:y1] rimage2=oimage2 endif if nb ge 4 then begin oimage3=data3[x0:x1,y0:y1] rimage3=oimage3 endif endif return endif ;in the original inage window if(sEvent.id EQ draw1)then begin wset,win1 WIDGET_CONTROL,WID_TEXT_0,SET_VALUE=string(sevent.x,sevent.y,format=′("坐 标:",i,",",i)′) ;detect if do rectifing if flag eq 0 then begin if(sevent.x lt 0)or(sevent.y lt 0)or$ (sevent.x ge 599)or(sevent.y ge 599)then return <dp n="d12"/> WIDGET_CONTROL,xy_pnts,SET_UVALUE=xy,/NO_COPY if mode eq 0 then begin if n ge 2 then$ W_CW_DEFROI_draw,n-2 endif else begin W_CW_DEFROI_draw,n-1 endelse return endif else begin dcolor=255 ;in the little rectify module ;Handle button press. if((sEvent.press AND 1)NE 0)then begin if(button EQ 1)then RETURN DEVICE,SET_GRAPHICS=6 xx1=(xx0=sEvent.x) yy1=(yy0=sEvent.y) button=1 RETURN endif ;Handle button release. if((sEvent.release and 1)NE 0)then begin PLOTS,[xx0,xx1],[yy0,yy1],COLOR=dcolor,/DEVICE arrow,xx0,yy0,xx1,yy1,COLOR=dcolor DEVICE,SET_GRAPHICS=3 button=0 ;将每次的调整值记录在数组cpnts中 cpnts[0:3,ncpnts]=[xx0,yy0,xx1,yy1] ncpnts=ncpnts+1 ;将图象的角点存入数组cpnts中,并计算参与运算的角点个数 w_peopleCorners,nn ;设置显示的桢数,这里设置为2 nframes=2 ;调用三角网校正模型进行校正 cpx=cpnts[0,ncpnts-1:nn] cpy=cpnts[1,ncpnts-1:nn] <dp n="d13"/> x=cpnts[2,ncpnts-1:nn] y=cpnts[3,ncpnts-1:nn] rimager=WARP_TRI(x,600-y,cpx,600-cpy,rimager) if nb ge 2 then rimage1=WARP_TRI(x,600-y,cpx,600-cpy,rimage1) if nb ge 3 then rimage2=WARP_TRI(x,600-y,cpx,600-cpy,rimage2) if nb ge 4 then rimage3=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 ;Handle button motion. if(button)then begin 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 endelse return endif else begin WIDGET_CONTROL,sEvent.top,/HOURGLASS WIDGET_CONTROL,sEvent.id,GET_UVALUE=b if(b EQ′CW′)then b=sEvent.value case b of ′打开...′:begin ENVI_SELECT,fid=afid,pos=apos,dims=adims,/file_only,title=′选择待调整影像 文件′ if(afid[0]eq-1)then return ENVI_FILE_QUERY,afid,ns=ns,nl=nl,nb=nb,$ fname=fname,data_type=data_type,$ interleave=interleave,offset=offset ;read the original image bands into variables datar=ENVI_GET_DATA(fid=afid,dims=adims,pos=apos[0]) if nb ge 2 then data1=ENVI_GET_DATA(fid=afid,dims=adims,pos=apos[1]) if nb ge 3 then data2=ENVI_GET_DATA(fid=afid,dims=adims,pos=apos[2]) if nb ge 4 then data3=ENVI_GET_DATA(fid=afid,dims=adims,pos=apos[3]) <dp n="d14"/> ;compute the X and Y size of the scroll image windowsizer=size(datar) if sizer[1]eq sizer[2]then begin scrollx=256 scrolly=256 endif else begin if sizer[1]ge sizer[2]then begin scrollx=256 scrolly=fix(sizer[2]/(sizer[1]/256)) endif else begin scrollx=fix(sizer[1]/(sizer[2]/256)) scrolly=256 endelse endelse ;compute the X and Y size of the original image window imagex=600 imagey=600 if sizer[1]le 600 then imagex=sizer[1] if sizer[2]le 600 then imagey=sizer[2] ;select the base image ENVI_SELECT,fid=bfid,pos=bpos,dims=bdims,/band_only,title=′选择基准影像′ if(bfid[0]eq-1)then return datab=(datag=ENVI_GET_DATA(fid=bfid,dims=bdims,pos=bpos)) SWIN=!D.WINDOW ;display the scroll image simager=congrid(datar,scrollx,scrolly) simageg=congrid(datag,scrollx,scrolly) simageb=congrid(datab,scrollx,scrolly) simage=intarr(scrollx,scrolly,3) simage[*,*,0]=simager simage[*,*,1]=simageg simage[*,*,2]=simageb wset,win0 TV,simage,true=3,order=order ;display the original image wset,win1 <dp n="d15"/> oimager=datar[0:imagex-1,0:imagey-1] oimageg=datag[0:imagex-1,0:imagey-1] oimageb=datab[0:imagex-1,0:imagey-1] oimage=intarr(imagex,imagey,3) oimage[*,*,0]=oimager oimage[*,*,1]=oimageg oimage[*,*,2]=oimageb tv,oimage,true=3,order=order rimager=oimager rimage=oimage if nb ge 2 then begin oimage1=data1[0:imagex-1,0:imagey-1] rimage1=oimage1 endif if nb ge 3 then begin oimage2=data2[0:imagex-1,0:imagey-1] rimage2=oimage2 endif if nb ge 4 then begin oimage3=data3[0:imagex-1,0:imagey-1] rimage3=oimage3 endif WSET,SWIN endcase ′保存′:begin openw,lun,fname,/get_lun writeu,lun,datar if nb ge 2 then writeu,lun,data1 if nb ge 3 then writeu,lun,data2 if nb ge 4 then writeu,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_id endcase ′另存为...′:begin outfile=Dialog_Pickfile(Path=current,/NoConfirm,Get_Path=path,Filter=[′*.*′],$ title=′文件另存为...′) IF outfile NE"THEN BEGIN openw,lun,outfile,/get_lun writeu,lun,datar if nb ge 2 then writeu,lun,data1 if nb ge 3 then writeu,lun,data2 <dp n="d16"/> if nb ge 4 then writeu,lun,data3 free_lun,lun envi_setup_head,fname=outfile,ns=ns,nl=nl,nb=nb,$ data type=data_type,offset=offset,interleave=interleave,/write,/open ENDIF endcase ′多边形选择′: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,0 endcase ′影像微调′:begin widget_control,junk,sensitive=0 widget_control,WID_BASE_12,sensitive=1 flag=1 endcase ′调整′:begin datar[x0:x1,y0:y1]=imager if nb ge 2 then data1[x0:x1,y0:y1]=rimage1 if nb ge 3 then data2[x0:x1,y0:y1]=rimage2 if nb ge 4 then data3[x0:x1,y0:y1]=rimage3 endcase ′撤消′:begin if(ncpnts EQ 0)then return ;对最近的调整结果进行反向调整 nn=ncpnts+3+ss cpx=cpnts[0,ncpnts-1:nn] 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) if nb ge 2 then rimage1=WARP_TRI(cpx,600-cpy,x,600-y,rimage1) if nb ge 3 then rimage2=WARP_TRI(cpx,600-cpy,x,600-y,rimage2) if nb ge 4 then rimage3=WARP_TRI(cpx,600-cpy,x,600-y,rimage3) rimage[*,*,0]=rimager tv,rimage,true=3,order=order W_CW_DEFROI_draw,-1 <dp n="d17"/> ;对数组cpnts进行更新 for i=ncpnts,nn do cpnts[0:3,i-1]=cpnts[0:3,i] cpnts[0:3,nn]=[0,0,0,0] ncpnts=ncpnts-1 endcase ′重置′:begin tv,oimage,true=3,order=order W_CW_DEFROI_DRAW,-1 rimager=oimager if nb ge 2 then rimage1=oimage1 if nb ge 3 then rimage2=oimage2 if nb ge 4 then rimage3=oimage3 rimage=oimage for i=0,ncpnts-1 do begin cpnts[0:3,i]=[0,0,0,0] endfor ncpnts=0 endcase ′退出′:WIDGET_CONTROL,sEvent.top,/DESTROY ′关于little rectify′:begin spawn,′D:\RSI\IDL60\products\envi40\save_add\text\help.doc′,/hide ;spawn,′C:\WINNT\clock.avi′,/hide endcase endcase endelse end ;---------------------------------------------------------- ;---------------------------------------------------------- ;Purpose Cleanup procedure. Pro w_little_rectify_cleanup,wTopBase WIDGET_CONTROL,wTopBase,GET_UVALUE=sState,/No_Copy TVLCT,sState.previouscolorTable common little_common oimager=0 oimage=0 end ;---------------------------------------------------------- <dp n="d18"/> ;---------------------------------------------------------- ;main procedure define pro w_little_rectify,event common little_common group=0L ;initial associated vriable RETAIN=2 button=0 order=1 mode=0 flag=0 roinpts=0L n=0 drag=[0,0] ncpnts=0 cpnts=fltarr(4,100) ;select the original image to rectify ENVI_SELECT,fid=afid,pos=apos,dims=adims,/file_only,title=′选择待调整影像文件′ if(afid[0]eq-1)then return ENVI_FILE_QUERY,afid,ns=ns,nl=nl,nb=nb,$ fname=fname,data_type=data_type,$ interleave=interleave,offset=offset ;read the original image bands into variables datar=ENVI_GET_DATA(fid=afid,dims=adims,pos=apos[0]) if nb ge 2 then data1=ENVI_GET_DATA(fid=afid,dims=adims,pos=apos[1]) if nb ge 3 then data2=ENVI_GET_DATA(fid=afid,dims=adims,pos=apos[2]) if nb ge 4 then data3=ENVI_GET_DATA(fid=afid,dims=adims,pos=apos[3]) ;compute the X and Y size of the scroll image window sizer=size(datar) if sizer[1]eq sizer[2]then begin scrollx=256 scrolly=256 endif else begin if sizer[1]ge sizer[2]then begin scrollx=256 scrolly=fix(sizer[2]/(sizer[1]/256)) <dp n="d19"/> endif else begin scrollx=fix(sizer[1]/(sizer[2]/256)) scrolly=256 endelse endelse ;compute the X and Y size of the original image window imagex=600 imagey=600 if sizer[1]le 600 then imagex=sizer[1] if sizer[2]le 600 then imagey=sizer[2] ;select the base image ENVI_SELECT,fid=bfid,pos=bpos,dims=bdims,/band_only,title=′选择基准影像′ if(bfid[0]eq-1)then return datab=(datag=ENVI_GET_DATA(fid=bfid,dims=bdims,pos=bpos)) SWIN=!D.WINDOW ;Get the current color table TVLCT,savedR,savedG,savedB,/GET previousColorTable=[[savedR],[savedG],[savedB]] ;Create the widgets base=Widget_Base(GROUP_LEADER=wGroup,UVALUE=′base′$ ,XOFFSET=50,YOFFSET=50,SCR_XSIZE=890,SCR_YSIZE=660$ ,TITLE=′little rectify′,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=′影像微调′) <dp n="d20"/> 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) ;initial the draw widget doEvents=(retain eq 2?0:1) if(sizer[0]eq 0)then doEvents=0 WID_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) <dp n="d21"/> 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_EVE NTS,/BUTTON_EVENTS) ;define the menu of base widget W_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=′关于little rectify′,VALUE=′关于 little rectify′) Widget_Control,/REALIZE,base WIDGET_CONTROL,draw0,GET_VALUE=win0 WIDGET_CONTROL,draw1,GET_VALUE=win1 ;display the scroll image simager=congrid(datar,scrollx,scrolly) simageg=congrid(datag,scrollx,scrolly) simageb=congrid(datab,scrollx,scrolly) simage=intarr(scrollx,scrolly,3) simage[*,*,0]=simager simage[*,*,1]=simageg simage[*,*,2]=simageb wset,win0 TV,simage,true=3,order=order ;display the original image <dp n="d22"/> wset,win1 oimager=datar[0:imagex-1,0:imagey-1] oimageg=datag[0:imagex-1,0:imagey-1] oimageb=datab[0:imagex-1,0:imagey-1] oimage=intarr(imagex,imagey,3) oimage[*,*,0]=oimager oimage[*,*,1]=oimageg oimage[*,*,2]=oimageb tv,oimage,true=3,order=order rimager=oimager rimage=oimage print,nb if nb ge 2 then begin oimage1=data1[0:imagex-1,0:imagey-1] rimage1=oimage1 endif if nb ge 3 then begin oimage2=data2[0:imagex-1,0:imagey-1] rimage2=oimage2 endif if nb ge 4 then begin oimage3=data3[0:imagex-1,0:imagey-1] rimage3=oimage3 endif WSET,SWIN ;Create the state structure sState={previousColorTable:previousColorTable,$ groupBase:group} WIDGET_CONTROL,base,SET_UVALUE=sState,/NO_COPY XManager,′w_little_rectify′,base,EVENT_HANDLER=′w_little_rectify_event′,$ CLEANUP=′w_little_rectify_cleanup′,/NO_BLOCK end
参见图3、图4、图5、图6,本发明选取的试验数据为SPOT5多光谱数据和全色数据这两种数据,由于这两种数据为不同的传感器所获取,在做数据融合时很难实现完全套合,下面为使用该技术进行校正的结果和原始数据的比较的。
Claims (2)
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提出的表面样条函数拟合方法可以有效地解决控制点精确吻合的问题;
式中ri 2=(x′-xi′)2+(y-yi′)2
通过下面线性方程组求解N+3个参数α0,α1,α2,Fi,i=1,2,...,N,式中Fi满足下列条件:
利用该函数可以保证用户给定的各点被准确调整到指定的位置,而其它的像元则相应的平滑调整,从而实现图像的完全配准。
(4)、图像输出。
2、根据权利要求1所述的用于遥感影像局部校正的处理方法,其特征在于:
上述过程的软件开发语言为面向矩阵的用于数据可视化研究与应用开发的高级语言,是第四代可视化开发语言IDL(InteractiveData Language)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2005100417839A CN1831555B (zh) | 2005-03-10 | 2005-03-10 | 用于遥感影像局部校正的处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2005100417839A CN1831555B (zh) | 2005-03-10 | 2005-03-10 | 用于遥感影像局部校正的处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1831555A true CN1831555A (zh) | 2006-09-13 |
CN1831555B CN1831555B (zh) | 2011-05-11 |
Family
ID=36993967
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2005100417839A Expired - Fee Related CN1831555B (zh) | 2005-03-10 | 2005-03-10 | 用于遥感影像局部校正的处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1831555B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101210964B (zh) * | 2006-12-26 | 2010-11-10 | 环达电脑(上海)有限公司 | 基于非电子地图上的三点定位方法 |
CN101916430A (zh) * | 2010-07-13 | 2010-12-15 | 武汉大学 | 基于波段相关性的遥感影像类内局部拟合恢复方法 |
CN101315424B (zh) * | 2008-07-29 | 2011-06-08 | 中国科学院对地观测与数字地球科学中心 | 多卫星遥感数据一体化并行地面预处理系统 |
CN102495405A (zh) * | 2011-11-30 | 2012-06-13 | 武汉大学 | 一种tm/etm+影像大气校正产品质量评价方法 |
CN102768757A (zh) * | 2012-06-28 | 2012-11-07 | 北京市遥感信息研究所 | 一种基于图像类型分析的遥感图像色彩校正方法 |
CN104660984A (zh) * | 2015-01-16 | 2015-05-27 | 北京航空航天大学 | 一种艇载多光谱高清对地观测装置 |
CN111402167A (zh) * | 2020-03-19 | 2020-07-10 | 重庆市勘测院 | 一种影像色彩归一方法 |
CN111754556A (zh) * | 2020-06-23 | 2020-10-09 | 自然资源部四川测绘产品质量监督检验站(四川省测绘产品质量监督检验站) | 一种递增式无人机航摄重叠度检测方法及系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1168047C (zh) * | 2002-12-19 | 2004-09-22 | 上海交通大学 | 遥感图像的非线性配准方法 |
CN1251142C (zh) * | 2003-11-20 | 2006-04-12 | 上海交通大学 | 刚体变换下基于轮廓的多源图像配准方法 |
-
2005
- 2005-03-10 CN CN2005100417839A patent/CN1831555B/zh not_active Expired - Fee Related
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101210964B (zh) * | 2006-12-26 | 2010-11-10 | 环达电脑(上海)有限公司 | 基于非电子地图上的三点定位方法 |
CN101315424B (zh) * | 2008-07-29 | 2011-06-08 | 中国科学院对地观测与数字地球科学中心 | 多卫星遥感数据一体化并行地面预处理系统 |
CN101916430A (zh) * | 2010-07-13 | 2010-12-15 | 武汉大学 | 基于波段相关性的遥感影像类内局部拟合恢复方法 |
CN102495405A (zh) * | 2011-11-30 | 2012-06-13 | 武汉大学 | 一种tm/etm+影像大气校正产品质量评价方法 |
CN102768757A (zh) * | 2012-06-28 | 2012-11-07 | 北京市遥感信息研究所 | 一种基于图像类型分析的遥感图像色彩校正方法 |
CN102768757B (zh) * | 2012-06-28 | 2015-01-07 | 北京市遥感信息研究所 | 一种基于图像类型分析的遥感图像色彩校正方法 |
CN104660984A (zh) * | 2015-01-16 | 2015-05-27 | 北京航空航天大学 | 一种艇载多光谱高清对地观测装置 |
CN104660984B (zh) * | 2015-01-16 | 2018-10-16 | 北京航空航天大学 | 一种艇载多光谱高清对地观测装置 |
CN111402167A (zh) * | 2020-03-19 | 2020-07-10 | 重庆市勘测院 | 一种影像色彩归一方法 |
CN111402167B (zh) * | 2020-03-19 | 2023-04-18 | 重庆市勘测院 | 一种影像色彩归一方法 |
CN111754556A (zh) * | 2020-06-23 | 2020-10-09 | 自然资源部四川测绘产品质量监督检验站(四川省测绘产品质量监督检验站) | 一种递增式无人机航摄重叠度检测方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN1831555B (zh) | 2011-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1831555A (zh) | 用于遥感影像局部校正的处理方法 | |
CN1057729A (zh) | 计算机图形动画制作系统 | |
Downes et al. | What you see is not always what you get: A qualitative, comparative analysis of ex ante visualizations with ex post photography of landscape and architectural projects | |
US9053578B2 (en) | Techniques for capturing and generating images and reports with image elements and live data | |
US9911209B2 (en) | System and method for improving video and other media playback | |
US20120179432A1 (en) | Geospatial modeling system providing poisson-based void inpainting and related methods | |
CN101493893B (zh) | 一种图像数据融合方法 | |
CN103544685A (zh) | 一种基于主体调整的图像构图美化方法及系统 | |
EP1416468A3 (en) | Method of fast processing image data for improving image visibility | |
Jenny et al. | Design principles for Swiss-style rock drawing | |
Mundy et al. | RADIUS common development environment | |
Deng et al. | Citygen: Infinite and controllable 3d city layout generation | |
CN117689833A (zh) | 基于规则建模的城市三维模型构建方法、系统及介质 | |
JP6120603B2 (ja) | 表示制御装置および方法 | |
Hoarau et al. | Mixing, blending, merging or scrambling topographic maps and orthoimagery in geovisualizations | |
JP2008242533A (ja) | 着色図面作成装置及び方法並びにそのプログラム | |
CN113034661B (zh) | 一种MatCap贴图生成的方法及装置 | |
CN101930340B (zh) | 一种电子书模拟真实翻页产生光照效果的方法 | |
US20130216134A1 (en) | System And Method For Effectively Performing A Scene Representation Procedure | |
CN1932757A (zh) | Core1DRAW软件教学技术方案 | |
CN102073468B (zh) | 一种基于视窗系统实现图像边缘融合方法 | |
CN111563947B (zh) | 全球三维云的互动实时体渲染方法 | |
CN102521867B (zh) | 一种手机动漫人物及背景创作方法 | |
Alsadik | Practicing the geometric designation of sensor networks using the Crowdsource 3D models of cultural heritage objects | |
JP2021033899A (ja) | 合成画像生成装置、合成画像生成プログラム及び合成画像生成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110511 Termination date: 20140310 |