1.01k likes | 1.52k Views
1 장 . 디지털 영상처리의 개념 (2). 임은경. 차례 및 목적. 차례 영상처리의 개념 영상처리에 대한 이야기 영상 데이터에 대한 이해 영상처리의 응용분야 영상처리의 전망. 차례 및 목적. 차례 오픈소스 CxImage 로 영상다루기 영상처리 프로그래밍 패턴 CxImage 소개 CxImage 라이브러리 만들기 CxImage 와 연계를 위한 프로그램 뼈대 만들기 CxImage 라이브러리 연동하기 영상 읽기 영상 보기 영상 저장
E N D
1장. 디지털 영상처리의 개념(2) 임은경 2주차 - 디지털영상처리의개념
차례 및 목적 • 차례 • 영상처리의 개념 • 영상처리에 대한 이야기 • 영상 데이터에 대한 이해 • 영상처리의 응용분야 • 영상처리의 전망 2주차 - 디지털영상처리의개념
차례 및 목적 • 차례 • 오픈소스 CxImage로 영상다루기 • 영상처리 프로그래밍 패턴 • CxImage 소개 • CxImage 라이브러리 만들기 • CxImage와 연계를 위한 프로그램 뼈대 만들기 • CxImage 라이브러리 연동하기 • 영상 읽기 • 영상 보기 • 영상 저장 • CxImage 기반 영상 처리 프로그램 작성 – 지터 효과(jittereffect) • CxImage 기반 visualGS 라이브러리 작성과 지터 효과 프로그램 작성 • 수행시간 측정하기 • CxImage 제공 함수 목록 2주차 - 디지털영상처리의개념
CxImage로 영상다루기 • 영상 포맷 • RAW • JPEG • BMP • PNG • GIF • 다양한 포맷이 나온 이유? • 영상의 대용량 처리 • 압축 기술에 차이 • 압축 기술은 영상의 특성을 잘 반영하여 표현 2주차 - 디지털영상처리의개념
CxImage로 영상다루기 HEAD HEAD 없음 영상 데이터 영상 데이터 BMP, JPG, GIF, 등의 헤드가 있는 파일들 RAW 파일(헤드가 없음) * 헤드 내에는 영상의 크기, 컬러의 수, 팔레트 등의 다양한 정보가 들어 있음 * RAW 파일은 헤드 정보가 없으며 파일을 읽기 위해서는 영상의 크기를 미리 알고 있어야 함. • 영상 포맷의 차이 • BMP, RAW 비교 2주차 - 디지털영상처리의개념
CxImage로 영상다루기 • BMP, GIF, JPEG 헤더 정보 비교 • 그림 1.22를통해서 헤더 정보의 내용 차이를 알수 있음 2주차 - 디지털영상처리의개념
CxImage 라이브러리 만들기 • CxImage 의 최신 버전과 최근 버전을 다운로드 • http://www.xdp.it • 강의 홈페이지를 통해서 다운 가능 • CxImage599c_full.zip 다운로드 받기 • 압축 풀기 • 영상처리 프로젝트를 개발할 폴더와 같은 위치에 압축 풀기 • d:\dip\cximage599c_full\ • 라이브러리 생성하기 • 압축푼 폴더 내에 CxImageLib.dsw를 마우스로 더블클릭하여 실행 2주차 - 디지털영상처리의개념
CxImage 라이브러리 만들기 • Workspace 창의 [File View]탭을 클릭하기 • CxImage file ~ demoDll File 까지정적 링크 라이브러리를 생성하기 위해 빌드함 • 생성되는 정적 링크 라이브러리 • CxImage.Lib • CxImageCrtDll.Lib • cximaged.dll • Demod.exe • Demoddll.exe • Demod.exe 실행하기 2주차 - 디지털영상처리의개념
프로그램 뼈대 만들기 • 프로그램 뼈대 만들기 • 비주얼 c++ 실행하기 • 메뉴 File – New 를 선택 • 프로젝트생성 창에 프로젝트 탭을 선택하고, MFC AppWizard(exe) 를선택 • 프로젝트 폴더 : d:\dip\ • 확인버튼 클릭하여 다음단계로 넘어감 • 프로젝트 생성 6단계 창에서… • Baseclass를 CScrallView로 선택하고 마침 버튼 클릭 • 프로젝트 생성 후, 실행하기 2주차 - 디지털영상처리의개념
프로그램 뼈대 만들기 • 윈도우 프로그램 작성 • Visual C++에서는 윈도우 프로그램 작성을 도와주는 마법사를 제공 • 몇 가지 선택 사항을 입력하면 자동으로 기본적인 윈도우 프로그램이 생성됨 • 생성된 윈도우 프로그램을 확장하여 개별적인 응용 프로그램을 작성할 수 있도록 해주는 기능이 제공됨 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 • Visual C++ 프로그램 실행한 다음 [File] 메뉴에서 [New] 항목 선택 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 2. [Projects] 탭을 선택한 다음 “MFC AppWizard(exe)”를 선택. Project name 상자에 프로그램 이름 “Hello”를입력. Location 상자에서 폴터 위치 지정 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 3. 1단계 부터 6단계 까지의 선택 사양 설정을 해야 하는데, 여기에서는 기본 설정을 사용해도 되므로 1단계에서 바로 [Finish] 버튼 선택해도 상관없다. 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 • 옵션에 따른 프로그램 타입의 종류 Single Document Multiple Document Dialog based 타입 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 4. 2단계 – database 기능을 추가할 것인지 아닌지를 설정하는 단계를 나타냄 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 5. 3단계 – OLE와 관련된 선택 사항들을 설정하는 단계 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 6. 4단계 –툴바, 상태바, 프린트기능 등을 부여할 것인지 여부를 설정하는 단계 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 앞의 대화상자에서 [Advanced…]를 클릭하면, 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 앞의 대화상자에 존재하는 옵션과 설명… 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 7. 5단계 –실행될 프로그램의 스타일과 설명문(주석문)을 자동으로 삽입할 것인지 여부, MFC 라이브러리를 어떤 방식으로 사용할 것인지 여부 등을 설정함 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 8. 6단계 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 8. 마지막 단계 –생성될 프로젝트의 정보를 나타냄 4주차 - MFC를 이용한 영상처리 프로그래밍
애플리케이션 마법사를 이용한 MFC 프로젝트의 작성 9. 생성된 프로젝트의 모습 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 10. 실행결과 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 • 탭의 전환에 따른 workspace 정보들 • 탭에 대한 설명 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 • MFC프로그램의 구성요소 세가지 • 메인프레임 윈도우 • 윈도우 내부의 오픈된 창 부분을 제외한 나머지 부분을 가리킴 • 메뉴, 툴바, 상태바 등의 프로그램을 뼈대를 가짐 • 문서객체 • 데이터의 저장, 변환, 처리, 삭제 등을 담당하는 객체 • 눈에 보이지 않음 • 뷰객체 • 문서객체의 데이터를 화면(열린창)에 출력하는 역할을 담당하는 객체 • MFC 프로그래밍 데이터의 처리와 데이터의 출력을 분리된 두개의 다른 클래스에서 담당 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 • View 클래스의 OnDraw() 함수 • 데이터를 화면에 출력하는 기능을 담당하는 함수 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 • 객체들간의 메시지 통신 • 세가지 객체들은 서로 통신되어야 함 • HOW? • 객체들 사이에서 데이터나 함수의 상호참조를 위해 유용한 함수를 제공함 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 • Document 클래스(CtestDoc)에 마우스를 두고 오른쪽 버튼을 누르면 메뉴가 나타남 • 이 메뉴상에서 <Add Member Variable…>을 선택 • 클래스에 새로운 멤버변수를 추가하고자 할 경우에 사용함 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 • 입력대화상자가 나타나고, 각 변수 타입과 변수이름, 접근 방법을 물어본다. • 다음과 같이 설정하라. 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 • 다음과 같이 나타남 4주차 - MFC를 이용한 영상처리 프로그래밍
프로그램 뼈대 만들기 • 프로그램 타입 • Single Document • SDI • 하나의 프로그램에 하나의 창만 존재하는 구조 • Internet Explorer는 대표적인 SDI 구조 • Multiple Document • MDI • PaintShop과 같이 프로그램 내에 여러 개의 창이나 문서를 열 수 있는 구조 • 많은 응용 프로그램들이 이 구조를 사용함 • Dialog based 타입의 Document • 메시지 박스나 이와 같은 구조를 사용하는 프로그램 4주차 - MFC를 이용한 영상처리 프로그래밍
CxImage 라이브러리 연동하기 • 헤더 파일 복사하기 • FirstCxImage 프로젝트의 폴더 공간에 include 폴더를 만듬 • Cximage599c_full/CxImage의 모든 헤더파일(*.h)를앞의 include 폴더로복사하기 2주차 - 디지털영상처리의개념
CxImage 라이브러리 연동하기 헤더 파일 디렉토리를 프로젝트 설정에 포함하기 2주차 - 디지털영상처리의개념
CxImage 라이브러리 연동하기 StdAfx.h에 CxImage의 헤더 파일인 xImage.h 추가하기 2주차 - 디지털영상처리의개념
CxImage 라이브러리 연동하기 • CxImage 정적링크 라이브러리 연동하기 • CxImage 정적 라이브러리와 연동할 영상 포맷 관련 라이브러리 복사하기 • 윈도우 검색 메뉴를 이용하여, Cximage599c_full 폴더에서 제공된 *.lib 를 찾아보자 • 여러 개의 파일 중 영상 포맷 관련 라이브러리를 복사하자 • 파일들… • J2k.lib , Jasper.lib , Jbig.lib , Jpeg.lib , Png.lib , Tiff.lib , Zlib.lib • 자신이 생성한 프로젝트 FirstCxImage 폴더 안에 lib 폴더를 만들고 그 안에 복사하여 붙여 넣자. 2주차 - 디지털영상처리의개념
CxImage 라이브러리 연동하기 • CxImage 정적링크 라이브러리 복사하기 • Cximage599c_full 폴더 내에 있는 CxImage 폴더 내에 있는 debug 폴더 내에 • Cximage.lib 를복사하기 • FirstCxImage 폴더 내에 debug 폴더 안에 • 복사한 CxImage.lib 를붙여넣기 2주차 - 디지털영상처리의개념
CxImage 라이브러리 연동하기 • CxImage 정적링크 파이브러리명과 영상 포맷 관련 라이브러리 명을 프로젝트에 설정하기 • Object/library modules 밑의 입력 창에 다음을 입력 • Debug/cximage.lib ./lib/png.lib ./lib/Jpeg.lib ./lib/zlib.lib ./lib/Tiff.lib ./lib/j2k.lib ./lib/jbig.lib ./lib/jasper.lib 2주차 - 디지털영상처리의개념
CxImage 라이브러리 연동하기 • FirstCxImage 재빌드시키고 실행하기 2주차 - 디지털영상처리의개념
영상 읽기 • MFC 구현 • 영상을 읽고 저장할때 필요한 변수를 관리하는 곳…? • 수행은…? • 읽은 영상 데이터를 우리 눈에 보여주는 곳…? • 수행은…? • View와 Document 클래스 • Document 클래스 • 데이터의 저장, 변환, 처리를 위한 역할 • View 클래스 • 도큐먼트 클래스의 데이터를 화면에 출력하는 역할 2주차 - 디지털영상처리의개념
영상 읽기 • 도큐먼트 클래스에 멤버 변수 추가 • CFirstCxImageDoc 선택 후, 오른쪽 마우스 버튼을 누르면 팝업 메뉴가 나타남 • Add Member Variable…을 선택 • 입력 대화창에 변수 이름과 데이터형을 입력한다. • 데이터형 : CxImage* • 변수 이름 : m_pImage • 확인버튼클릭하면, workspace창이나 소스의 헤더 파일에 추가됨. • 추가된 m_Image를 초기화하기 • FirstCxImageDoc.cpp의 생성자 파일 CFirstCxImageDoc()에서 초기화하기 • m_pImage = NULL; 2주차 - 디지털영상처리의개념
영상 읽기 • 영상파일을 읽어 오는 함수 재정의 • 읽거나 저장하는 방법 • Serialize 멤버변수를 사용하는 것 • MFC 클래스 내 데이터를 직접 읽거나 저장하는 가장 손쉬운 방식 • OnOpenDocument 함수를재정의(overriding)하는것 • 가상 함수를 추가 • 영상 데이터의 파일 포맷별 고유 특징 때문에 OnOpenDocument(), OnSaveDocument()함수를재정의한 후, 파일명을 넘겨 받아 처리하는 루틴 추가 • OnOpenDocument() 함수를추가 • CFirstCxImageDoc.cpp 문서에 팝업 메뉴에서 [Add Virtual Funtion]을선택하기 • OnOpenDocument를 선택하고 OnNewDocument를선택하여 [Add & Edit] 버튼을 클릭 2주차 - 디지털영상처리의개념
영상 읽기 • 함수 내에 다음을 추가하기 • m_pImage = new CxImage; • m_pImage->Load(lpszPathName, 0); • 앞에서메모리 할당 받음… 삭제해주는 Virtual 함수도추가해야 함.. 2주차 - 디지털영상처리의개념
영상 읽기 • DeleteDocuments 함수추가 • CFirstCxImageDoc.cpp 문서에 팝업 메뉴에서 [Add Virtual Funtion]을선택하기 • DeleteDocuments를 선택하고 OnNewDocument를선택하여 [Add & Edit] 버튼을 클릭 • 함수 내에 다음을 추가하기 • if(m_pImage ) delete m_pImage; 2주차 - 디지털영상처리의개념
영상 읽기 • 파일 열기 함수 OnFileOpen() 재정의 • 다양한 확장자를 갖는 영상 파일을 지원하기 위해 OnFileOpen() 즉 메뉴의 열기를 지원하기 • 프레임 윈도우(framewindow) 클래스 • 메뉴, 툴바, 상태바 등 프로그램을 구성하는 부분을 담당하는 클래스 • CFirstCxImageApp 클래스를의미함 • 메뉴에 프로그램 추가하기 • Workspace 창의 Resource View의메뉴 중 IDC_MAINFRAME을 선택하기 • [파일]-[열기]를 선택하고 오른쪽 마우스를 클릭 • 메뉴 중 [class wizard]를선택 • 다음과 같이 셋팅하기 2주차 - 디지털영상처리의개념
영상 읽기 • Add Function을클릭하면 • [OK]버튼 클릭하면 member functions에 함수가 추가됨 • Edit Code를클릭하면 소스 작성 창으로 접근 2주차 - 디지털영상처리의개념
영상 읽기 • 다음과 같이 작성하기 • char szFilter[] = "지원 영상 파일(*.bmp, *.jpg, *.gif, *png, *.tif)|*.bmp;*.jpg;*.gif;*.png;*.tif||"; 2주차 - 디지털영상처리의개념
영상 읽기 • 영상 보기 • 도큐먼트 클래스에서 넘어온 입력 파일에서 읽어 들인 영상 데이터는 m_pImage에 저장됨 • 이를 보여주기 위해 뷰 클래스 사용함 • OnDraw 멤버함수를 호출하여 프로그램 작성하기 • OnDraw () • 화면에결과를 출력하는 Cview 클래스의 대부분 역할을 담당하는 멤버 함수 • 영상 출력하기 • 뷰클래스(CFirstCxImageView) 내의 OnDraw()함수선택 • 소스 다음과 같이 코딩하기 2주차 - 디지털영상처리의개념
영상 읽기 • 실행해보기 2주차 - 디지털영상처리의개념
영상 읽기 2주차 - 디지털영상처리의개념