반응형

     정보

    • 업무명     : 아이디엘 객체 그래픽 (Object Graphics) 교육 연수

    • 작성자     : 이상호

    • 작성일     : 2020-05-12

    • 설   명      :

    • 수정이력 :

     

     내용

    [개요]

    • 안녕하세요? 기상 연구 및 웹 개발을 담당하고 있는 해솔입니다.

    • 오늘은 에스이랩 객체 그래픽 (Object Graphics) 교육 연수 내용을 다루고자 합니다.

    • 이 교육은 2일에 걸쳐 진행하였고 각 시간마다 이론 및 실습을 병행하여 진행했습니다.

    • 특히 배운 지식을 활용하여 학술 논문 또는 보고서 작성 시 많은 도움이 되었습니다.

    • 그에 따라 "교육 일정, 실습 자료, 관련 자료"순으로 소개해 드리겠습니다.

     

     

    [특징]

    • 이미지 처리 (Image Processing) 교육에 대한 이해를 돕기위해 작성

     

    [기능]

    • 교육 일정

    • 실습 자료

    • 관련 자료

     

    [사용 OS]

    • Window 10

     

    [사용 언어]

    • IDL v8.5

     

     세부 내용

    [교육 일정]

    • 1일

      • 10:00-10:50 Introduction / DG vs. OG vs. NG

      • 11:00-11:50 Basics in Object Graphics

      • 13:00-13:50 Overview of Object Classes

      • 14:00-14:50 Object Graphics Display Hierarchy

      • 15:00-15:50 Positioning and Transforming Objects

      • 16:00-17:00 Working with Colors

     

    • 2일

      • 10:00-10:50 Graphical Object Classes [1]

      • 11:00-11:50 Graphical Object Classes [2]

      • 13:00-13:50 Graphical Object Classes [3]

      • 14:00-14:50 Graphic Destination Objects

      • 15:00-15:50 Example Codes

      • 16:00-17:00 Conjunction with GUI Programming

     

     실습 자료

    • 필기안

    ============================
    	2016.10.16
    ============================
    
    이상우 박사가 진행.
    
    Q. NG, OG, DG의 차이?
    Q. IDL 프로그래밍 강의 언제?
    
    IDL 이후 파이썬으론
    제1일은 기본
    제2일은 그래픽 요소, 예제, GUI(또 다른 교육과정)
    OG와 GUI (시너지 증가)
    
    1. 소개
    IDL은 연구자(주)
    연구에 도움. 배경은 천문학, 연구자쪽 언어
    발전하면서 개발자 측면으로 발달.
    개발자(OG, Widget 프로그래밍)
    Widget : 앱을 개발
    OG : 사용자 중심 설정 가능
    
    2. 역사
    DG : 가장 쓰기 쉬움.
    iTools, NG :  사용자 편의를 위해서, NG는 사용하기 편함.
    NG보다는 OG로 갈 필요가 있음(자유도 증가).
    
    교재 : 
    
    그래픽 간의 차이 :
    DG : 그래픽 품질 투박.  메모리 관리 x
    OG : 어려움. 메모리 관리 o(포인팅으로 수정 가능)
    
    기본적인 내용
    객체 : 명령어와 데이터가 한 덩어리. R와 DG는 데이터와 명령어가 분리됨.
    너무 객체화되면 이해하기 어려움. 
    
    OP의 기본적인 요소 
    클래스 : 객체의 종류(DG 예; contour, plot 등)
    인스턴스 : 구현된 실체.
    메서드 : 구체화된 실체를 명령어를 내림.  이때 명령어가 제한됨.  행위.
    속성 : 특징.
    
    클래스 -> 객체 -> 행위 -> 특징
    obj_new 함수 : 내가 클래스 인자를 설정. (객체 레퍼런스 또는 객체 인스턴스 설정).
    obj_new('car') = car()  동일.
    Benz_C220 -> ccelerate, 100 (행위에 명령을 내림).
    Benz_C220 ->setproperty, color=[255, 255, 255] (색깔은 RGB로 주는 것이 원칙).
    setproperty (속성 설정) <-> getproperty
    
    실제 IDL 예제
    gr(그래픽 관련 객체)
    클래스 : IDLgrPlot, IDLgrModel
    공통 클래스 : Init, Cleanup, setproperty
    
    휴식
    
    IDLgrwindow : 메서드가 많음.
    
    객체의 매서드 : 기호(->),   8.0 이상으로 dot 기반 이용.
    oWindow -> Draw, oView (규칙)
    oWindow.Draw, oView  (최근에 허용 가능)
    
    도움말에 속성은 다양하게 지원.
    속성 설정은 GetProperty(속성의 정보를 가져와라), SetProperty(속성의 정보를 제어하고자 할때)
    myAxis -> GetProperty, RANGE=rng  (rng로 정보를 가져옴.  즉, 정보를 확인)
    myAxis -> SetProperty, RANGE=[-20, 20]  ([-20, 20]으로 설정)
    
    속성을 바꾸면 Draw로 모습을 봄.
    
    도움말에서 보면 Get :Yes, Set:Yes  이므로 확인할 필요 있음.  개발 속성을 살펴보아야 함.
    
    
    객체의 제거 :
    OG는 메모리를 점유하고 할때 OBJ_DESTROY, myAxis
    자동 메모리 정리 기능이 있음 (v8.0부터 등장).
    
    메모리 확인 필요함.
    help, /MEMORY
    
    
    IDL 객체 클래스의 종류
    명명 규칙 : IDLxxYyyy (gr:그래픽, ff:파일 포맷)  -->  대소문자 구분없이 사용가능(idlgrplot)
                        (시각적 이점을 가짐)
    외부 라이브러리와 기본 라이브러리 충돌을 조심. --> 기본 라이브러리 이용됨.
    또한 현재 디렉토리 설정 시 그 기반 라이브러리 이용됨.
    
    그래픽 구성 관련 객체 : 서로 간에 포함관계.  전체적인 계층구조.  눈으로 보이지 않음.
    Model : 모든 객체에 넣어야함. 눈에 보이지 않는 그릇. 
    View : Model의 상위 개념.   3차원 공간의 크기 및 좌표계 결정.
    OG는 무조건 3차원 공간상에서 나타남.  Z축이 시선방향임.  (차이점).  각 계층구조를 띄며 이를 구현해야 가시화 낼 수 있음. 
    Model과 View는 반드시 사용해야하는 클래스임.
    
    View Group (멀티 그래픽 그릴 때)
    
    개별 그래픽 요소 객체 :
    Palette : 컬러 테이블
    font : 하나의 객체
    Surface에서 Light(음영 효과)
    Pattern (빗금, 사선)
    Buffer(메모리상에 그림)
    Printer(프린터에 직접 전달)
    
    식사
    
    OG 계층구조 :
    Graphics Atom (개별 하위 객체).
    Draw 방법. 
    OG는 개발자 측면에서 사용가능.
    랜더링 : 시각적으로 구현화한다.
    
    oWindow, oViewm, oModel 을 항상 포함.
    oXAxis = OBJ_NEW('IDLgrAxis', 0)  여기서 (0:x축, 1:y축)
    
    Positioning Objects
    뷰포트 : PRO test_obj_viewport
    위치 : 객체의 위치. 
    
    투영법 : OG 기본적으로 3차원이기 때문에 필요함. 기본은 평행 투영, 내가 멀리서보든 가까이서 보든 똑같다.
    원근 투영은 광선이 방사적으로 퍼져나가게 보임.
    
    평행투영 : 가까우면 +, 멀어지면 -
    원근투영 : 어떻게 봄에 따라 크기 달라짐.  예) 행성의 이동
    
    눈의 위치 : Z축상에 가까워지나? 멀어지나?
    눈에 가까워지면 물체가 작게 보임.  눈이 멀어지면 물체가 크게 보임. 
    
    뷰 볼륨 : 내가 주어진 x, y, z축이 어떠한 좌표 설정을 해야하나?
    Viewplane_rect은 좌표체계 설정[-1,-1, 2, 2]은 -1을 2로 움직임.  좌표체계를 내가 설정.  절실히 필요함.
     기본설정은 -1, -1, 1, 1로 설정되어 있음.
    
    객체 이동, 회전, 확대/축소
    모델 객체에 대해서만 적용.
    
    이동 : Translate, x, y, z 축으로 이동
    회전 : x, y, z축을 중심으로 90방향. 오른쪽 90도.
    확대/축소 : scale x,y,z 축 배율 조정.
    
    휴식 
    
    좌표변환 : 객체마다 좌표변환이 필요함.  고정좌표계 안에서 실제 뷰포트 좌표계에 맞춰줄 필요가 있음.
    PRO test_obj_coord_conv
    
    XOBJVIEW : 직관적으로 그림을 보여줌. 모델단위까지 가능함.  유저친화적인 기능.
    IDL> oSurface = idlgrsurface(hanning(300,300)*300)
    IDL> xobjview, osurface
    hanning은 0~1 사이의 값을 가짐.
    IDL> oSurface = idlgrsurface(hanning(30,30)*30)
    IDL> xobjview, osurface 
    그물망으로 보여
    IDL> oSurface -> Setproperty, style=0
    IDL> xobjview, osurface
    심볼을 다르게 보여줌.
    IDL> oSurface -> Setproperty, style=0, color=[255, 0, 0]
    IDL> xobjview, osurface
    색깔을 지정.
    
    
    트랙볼 클래스 : 마우스(볼)형태로 회전, 크기 조정을 자유롭게 해줌.  GUI 프로그램으로 구현할때 필요함.
    
    컬러 해석 : 기본은 RGB 체계
    그래픽 디바이스 객체에서 인덱스 컬러 모델보다는 RGB 컬러 모델을 이용해라.
    
    팔레트 객체 :
    PRO test_obj_color1, PRO test_obj_color2 (그래픽창에 포물선)
    
    휴식
    
    OG는 그래픽 표출 순서도 중요함.
    
    축과 텍스트 객체
    축 : 
    PRO test_obj_axis
    PRO test_obj_temporal_plot
    
    소스코드 보고자 할‹š : IDL> .edit set_view
    IDL은 C++로 만들어짐.
    
    텍스트 개체 : 
    Font 설정
    PRO test_obj_text
    
    plot 객체 : 
    PRO test_obj_plot1
    PRO test_obj_plot2
    PRO test_obj_plot_xray_flux
    
    ============================
    	2016.10.17
    ============================
    2014, 2015년 폐강됨.
    
    contour 객체 
    2차원 데이터를 표출하는 방법임.  image 뿐만 아니라 Surface는 대표적인 방법임.
    등위선, 등고선으로 이어줌.  일종의 폴리곤으로 이루어짐. 
    PRO test_my_contour
    NG 그래픽과 유사한 명령어.
    
    PRO test_obj_contour0
    그래픽 창으로 그려줌.
    
    PRO test_obj_contour1
    IDL> norm_coord([0, 400])
         -0.00000000    0.0024999999
    xs = NORM_COORD(xrn)
    ys = NORM_COORD(yrn)
     0 ~ 1/400은 여백 없이 그려줌.  즉 1 투어 매칭을 할 필요가 있음.  image와 중첩할때 필요함.  
    
    xs[0] = xs[0]+0.15
    xs[1] = xs[1]*mf
    ys[0] = ys[0]+0.15
    ys[1] = ys[1]*mf
    여백을 주고자 스케일 조정을 함.
    
    PRO test_obj_contour2
    선과 fil을 모두 나타남.
    
    Surface 객체
    높이를 2차원으로 나타냄.  폴리곤의 집합.
    PRO test_my_surfce
    PRO test_obj_surface3
    PRO test_obj_surface4
    s = surface(dist(40)) : NG
    
    arithmetic error : 경고 메시지.
    !except=2 로 세팅하면 경고 메시지를 알려줌.
    !except=1 로 세팅(기본).
    
    image 객체 :
    RGB 3차원 데이터로 인자로 얻을 수 있음.
    PRO test_obj_image1
    PRO test_obj_image2
    PRO test_obj_image3
    
    
    IDL> w = window(buffer=1)
    IDL> p = plot(/test, /current)
    이 프로그램은 메모리 상에서 프로세싱됨.  즉, 그림이 안뜸.
    
    
    시간측정 
    tic, toc
    time = toc()
    print, time
    
    
    메모리 (필수)
    help, /memory
    OG는 객체 그래프라서 메모리가 계속 증가됨.  그래서 필요없는 메모리를 제거할 필요가 있음.
    print, obj_valid()  :  현재 정의되어 있는 객체를 알려줌(메모리 현황을 알려줌).
    obj_destory, obj_valid() : 정의된 객체 지워줌.
    
    
    PRO test_obj_image4
    태양의 자기장으로 보여줌. 
    
    
    광원 객체
    DG, NG에서 없음.  OG에서만 기능.
    4가지 음영효과를 줌. 
    PRO test_obj_light
    
    
    폴리곤 객체
    몇천, 몇만개임. 
    폴리곤 매쉬에 대한 정보가 필요함.
    PRO test_my_polygon
    3개의 점을 삼각형으로 이루어짐.
    PRO test_obj_polygon1
    PRO test_obj_polygon2
    PRO test_obj_polygon3
    
    
    폴리라인 객체 
    선으로 이어줌.
    PRO test_obj_polyline
    
    PRO test_obj_polygon4
    
    DXF files
    AutoCAD 데이터 포맷.
    이상우 블로그(64비트를 32비트로 읽는 방법)
    
    볼륨 객체
    시스템을 혹사시키는 방법.
    3차원의 이미지. 픽셀의 3차원(복셀)
    불투명도 이슈.
    
    PRO test_obj_volume1
    컬러 테이블 확인.
    loadct, 67
    xpalette
    colortable은 v8.2.1부터 이용.
    NG는 loadct 대신 colortable을 이용.
    
    PRO test_obj_volume2
    
    PRO test_obj_volume3
    등위면은 3차원 contour
    
    IDL> data = indgen(1, 10, 10)
    IDL> help, data
    DATA            INT       = Array[1, 10, 10]
    IDL> help, reform(data)
    <Expression>    INT       = Array[10, 10]
    3차원(1, 10, 10)을 1을 제거해줌.
    
    PRO test_obj_volume4
    PRO test_obj_volume5
    
    NG에서도 볼륨함수를 이용할 수 있음.
    
    
    그래픽 정의 객체
    버퍼는 메모리로 이용.
    PRO test_obj_destination1
    클립보드 객체 (eps 저장)
    복사/붙여넣기.  
    PDF도 지원해줌.
    PRO test_obj_destination2
    
    
    실전 예제 :
    GUI 어플리케이션을 OG 기반으로 구현시 필요함.
    PRO idraw_widget_events, event.
    widget 프로그래밍.
    PRO MOVE_BALL, pinfo

     

     관련 자료

    • 강의안 및 교육 자료 참조

     

    04. [에스이랩] IDL Object Graphics.7z

     

    drive.google.com

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

    [기상학/프로그래밍 언어]

    • sangho.lee.1990@gmail.com

    [해양학/천문학/빅데이터]

    • saimang0804@gmail.com
    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기