CN1831555A - 用于遥感影像局部校正的处理方法 - Google Patents

用于遥感影像局部校正的处理方法 Download PDF

Info

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
Application number
CN 200510041783
Other languages
English (en)
Other versions
CN1831555B (zh
Inventor
王政伟
万余庆
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
AIR SURVEY REMOTE SENSING BUREAU CHINESE COAL GEOLOGICAL BUREAU
Original Assignee
AIR SURVEY REMOTE SENSING BUREAU CHINESE COAL GEOLOGICAL BUREAU
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by AIR SURVEY REMOTE SENSING BUREAU CHINESE COAL GEOLOGICAL BUREAU filed Critical AIR SURVEY REMOTE SENSING BUREAU CHINESE COAL GEOLOGICAL BUREAU
Priority to CN2005100417839A priority Critical patent/CN1831555B/zh
Publication of CN1831555A publication Critical patent/CN1831555A/zh
Application granted granted Critical
Publication of CN1831555B publication Critical patent/CN1831555B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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提出的表面样条函数拟合方法可以有效地解决控制点精确吻合的问题;
f ( x , y ) = a 0 + a 1 x ′ + a 2 y ′ + Σ i = 1 N F i r i 2 ln r i 2
式中ri 2=(x′-xi′)2+(y-yi′)2
通过下面线性方程组求解N+3个参数α0,α1,α2,Fi,i=1,2,...,N,式中Fi满足下列条件:
Σ i = 1 n F i = 0 , Σ i = 1 n x i F i = 0 , Σ i = 1 n y i F i = 0
f ( x j , y j ) = a 0 + a 1 x j + a 2 y j + Σ i = 1 N F i r ij 2 ln r ij 2
r ij 2 = ( x i - y j ) 2 + ( y i - y j ) 2 , j = 1,2 , . . . , N , i ≠ j
利用该函数可以保证用户给定的各点被准确调整到指定的位置,而其它的像元则相应的平滑调整,从而实现图像的完全配准。
(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提出的表面样条函数拟合方法可以有效地解决控制点精确吻合的问题。
f ( x , y ) = a 0 + a 1 x ′ + a 2 y ′ + Σ i = 1 N F i r i 2 ln r i 2
式中ri 2=(x′-xi′)2+(y-yi′)2
通过下面线性方程组求解N+3个参数α0,α1,α2,Fi,i=1,2,...,N,式中Fi满足下列条件:
Σ i = 1 n F i = 0 , Σ i = 1 n x i F i = 0 , Σ i = 1 n y i F i = 0
f ( x j , y j ) = a 0 + a 1 x j + a 2 y j + Σ i = 1 N F i r ij 2 ln r ij 2
r ij 2 = ( x i - y j ) 2 + ( y i - y j ) 2 , j = 1,2 , . . . , N , i ≠ j
利用该函数可以保证用户给定的各点被准确调整到指定的位置,而其它的像元则做一种平滑的调整,从而实现图像的完全协调。
第二步是对整个技术流程进行编程实现。开发语言选择了第四代可视化开发语言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 &amp; 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 &amp;!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提出的表面样条函数拟合方法可以有效地解决控制点精确吻合的问题;
f ( x , y ) = a 0 + a 1 x &prime; + a 2 y &prime; + &Sigma; i = 1 N F i r i 2 ln r i 2
式中ri 2=(x′-xi′)2+(y-yi′)2
通过下面线性方程组求解N+3个参数α0,α1,α2,Fi,i=1,2,...,N,式中Fi满足下列条件:
&Sigma; i = 1 n F i = 0 , &Sigma; i = 1 n x i F i = 0 , &Sigma; i = 1 n y i F i = 0
f ( x j , y j ) = a 0 + a 1 x j + a 2 y j + &Sigma; i = 1 N F i r ij 2 ln r ij 2
r ij 2 = ( x i - y i ) 2 + ( y i - y i ) 2 j=1,2,...,N i≠j
利用该函数可以保证用户给定的各点被准确调整到指定的位置,而其它的像元则相应的平滑调整,从而实现图像的完全配准。
(4)、图像输出。
2、根据权利要求1所述的用于遥感影像局部校正的处理方法,其特征在于:
上述过程的软件开发语言为面向矩阵的用于数据可视化研究与应用开发的高级语言,是第四代可视化开发语言IDL(InteractiveData Language)。
CN2005100417839A 2005-03-10 2005-03-10 用于遥感影像局部校正的处理方法 Expired - Fee Related CN1831555B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1168047C (zh) * 2002-12-19 2004-09-22 上海交通大学 遥感图像的非线性配准方法
CN1251142C (zh) * 2003-11-20 2006-04-12 上海交通大学 刚体变换下基于轮廓的多源图像配准方法

Cited By (11)

* Cited by examiner, † Cited by third party
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