1장. 디지털 영상처리의 개념(2) 임은경 2주차 - 디지털영상처리의개념.

Slides:



Advertisements
Similar presentations
IT CookBook, 초보자의 첫 번째 파워포인트 2007 파워포인트 2007 기초. 2 이 장에서 배울 내용  01_ 파워포인트 2007 과 슬라이드 기본 조작법  02_ 텍스트와 워드아트  03_ 슬라이드 꾸미기.
Advertisements

1 파일 및 폴더 다루기 A. 파일이란 : 응용프로그램을 이용해서 만든 사용자가 만든 정보의 집합 - 파일 형식 : 이름과 확장자로 이뤄짐 예 sample.txt 샘플.txt - 복원하려면 휴지통에서 파일선택 후 드래그해서 밖으로 이동 혹은 RESTORE B. 확장자의.
1/29 키보드로 직접 입력할 수 없는 다양한 기호와 한자를 입력하는 방법을 알아 보자. 또한 블록으로 영역을 설정하는 여러 가지 방법에 대해 살펴본 후 블록 으로 설정된 내용을 복사하여 붙여넣거나, 잘라내고 이동하는 방법에 대해서 도 알아보자. 02_ 문서의 입력과 편집.
1/37 한글에는 전문적인 문서 편집을 위한 고급 기능이 있다. 문서를 편리하게 수 정할 수 있도록 도와주는 찾기 / 찾아 바꾸기, 다른 위치로 이동할 수 있는 책 갈피와 하이퍼링크에 대해 알아보자. 그리고 자주 사용하는 서식을 미리 정 해 놓고 쓰는 스타일 활용법과 스타일이.
데이터 완전삭제프로그램 Perfect Delete 사용설명서  주의 이 프로그램을 이용하여 삭제된 데이터는 어떠한 방법으 로도 복구가 불가능합니다. 그러므로 실제 데이터 삭제시 신중을 기하기 바랍니다.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
03장 영상처리를 위한 Visual C++ 디지털 영상 파일 포맷
기초C언어 제1주 실습 강의 소개, C언어 개요, Cygwin/Eclipse 사용 컴퓨터시뮬레이션학과 2016년 봄학기
OpenCV 안드로이드 연동 환경설정 OpenCV-Android 를 다운 받습니다.
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Image & Video processing
Power Java 제3장 이클립스 사용하기.
Power Java 제3장 이클립스 사용하기.
윤 홍 란 다이알로그(대화상자) 윤 홍 란
Power Java 제2장 자바 개발 도구.
Outlook Express 메일 백업 및 복원가이드
네트워크 프로그래밍 및 실습.
나민영 서경대학교 컴퓨터공학과 CGVR Lab 같이만들어보자 5주차 OpenCV 설정 및 기초.
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
Visual Basic .NET 처음 사용하기.
1. C++ 시작하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
제 2 장 WML 시뮬레이터 및 무선인터넷 서버 설치
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
소프트웨어 분석과 설계 Struts2 & JBOSS 설치하기
03장 영상처리를 위한 Visual C++ 디지털 영상 파일 포맷
WinCE Device Driver 실습 #3
ARM Development Suite v1.2
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
컴퓨터 프로그래밍 : 실습3 2장 데이터와 식.
분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일.
CHAP 12. 리소스와 보안.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
영상처리 실습 인공지능연구실.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
스크린 샷 클릭가능 클릭시 영한사전 반영.
ASP.NET AJAX / AJAX Control Toolkit 응용 2008 컴퓨터공학실험( I )
Moving Control in Web using Ajax Toolkit
1차시: 낮과 밤이 생기는 원리 지구과학
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
1. 스크립트 작성 마법사 2. NSIS 스크립트 컴파일
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
컴퓨터 개론 및 실습 1주차 2015년 03월 05일.
7주차 실습 FPGA 보드 사용법.
PMIS 서버 설정 환경설정 작성자 : 배경환.
빌드 성공.
( Windows Service Application Debugging )
학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성. 학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성.
Cold Spring Harbor Laboratory Press 저널 이용 매뉴얼
OpenCV 설정 2.21 만든이 딩딩.
DK-128 개발환경 설정 아이티즌 기술연구소
수동 설치시는 설치 방법 1. 두번에 설치 CD 속에 fscommand 폴더 밑에 Osstem 이라는 폴더를
영상처리 실습 (OpenCV + MFC) Chonbuk National University A.I. Lab.
메뉴(Menu) 컴퓨터응용 및 실습 I.
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
슬라이드 쇼의 설정 슬라이드 쇼의 실행 파일과 폴더의 관리 글꼴을 포함해서 저장 웹 페이지로 게시 압축 파일
2장. 페인트샵을 이용한 영상처리 맛보기 신라대학교 임은경 2주차 - 페인트샵을 이용한 영상처리 맛보기.
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
Docker Study 6~7.
이 프레젠테이션은 PowerPoint의 새로운 기능에 대해 안내하며, 슬라이드 쇼에서 가장 잘 보입니다
Power Point 예제 디자인 적용 (서식) - (디자인적용) - (원하는 디자인 선택)
JAVA 프로그래밍 16장 JNLP.
타이머를 시작하려면 슬라이드 쇼 메뉴에서 쇼 보기를 클릭하십시오.
Presentation transcript:

1장. 디지털 영상처리의 개념(2) 임은경 2주차 - 디지털영상처리의개념

차례 및 목적 차례 영상처리의 개념 영상처리의 응용분야 영상처리의 전망 영상처리에 대한 이야기 영상 데이터에 대한 이해 2주차 - 디지털영상처리의개념

차례 및 목적 차례 오픈소스 CxImage로 영상다루기 CxImage 제공 함수 목록 영상처리 프로그래밍 패턴 영상 읽기 영상 보기 영상 저장 CxImage 기반 영상 처리 프로그램 작성 – 지터 효과(jitter effect) CxImage 기반 visualGS 라이브러리 작성과 지터 효과 프로그램 작성 수행시간 측정하기 CxImage 제공 함수 목록 2주차 - 디지털영상처리의개념

CxImage로 영상다루기 영상 포맷 RAW JPEG BMP PNG GIF 다양한 포맷이 나온 이유? 영상의 대용량 처리 압축 기술에 차이 압축 기술은 영상의 특성을 잘 반영하여 표현 2주차 - 디지털영상처리의개념

CxImage로 영상다루기 영상 포맷의 차이 BMP, RAW 비교 HEAD HEAD 없음 영상 데이터 영상 데이터 BMP, JPG, GIF, 등의 헤드가 있는 파일들 RAW 파일(헤드가 없음) * 헤드 내에는 영상의 크기, 컬러의 수, 팔레트 등의 다양한 정보가 들어 있음 * 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단계 창에서… Base class를 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단계 – 툴바, 상태바, 프린트기능 등을 부여할 것인지 여부를 설정하는 단계 6. 4단계 – 툴바, 상태바, 프린트기능 등을 부여할 것인지 여부를 설정하는 단계 4주차 - MFC를 이용한 영상처리 프로그래밍

프로그램 뼈대 만들기 앞의 대화상자에서 [Advanced…]를 클릭하면, 4주차 - MFC를 이용한 영상처리 프로그래밍

프로그램 뼈대 만들기 옵션 설명 File Extension 앞의 대화상자에 존재하는 옵션과 설명… 옵션 설명 File Extension 실행파일의 메뉴에서 읽어들일 영상파일의 확장자를 지정해줌. 이 프로젝트에서 읽을 파일은 RAW파일이므로 확장자 “raw”를 적어줌 File type ID 시스템 레지스트리에 등록될 문서 타입 ID Main frame caption 프로그램 타이틀 바에 나타날 이름 설정 Doc type name 새로운 Doc 템플릿 추가시 사용하는 Doc 타입 이름 지정 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 프로그래밍 메인프레임 윈도우 문서객체 뷰객체 윈도우 내부의 오픈된 창 부분을 제외한 나머지 부분을 가리킴 메뉴, 툴바, 상태바 등의 프로그램을 뼈대를 가짐 문서객체 데이터의 저장, 변환, 처리, 삭제 등을 담당하는 객체 눈에 보이지 않음 뷰객체 문서객체의 데이터를 화면(열린창)에 출력하는 역할을 담당하는 객체 MFC 프로그래밍  데이터의 처리와 데이터의 출력을 분리된 두개의 다른 클래스에서 담당 4주차 - MFC를 이용한 영상처리 프로그래밍

프로그램 뼈대 만들기 View 클래스의 OnDraw() 함수 데이터를 화면에 출력하는 기능을 담당하는 함수 4주차 - MFC를 이용한 영상처리 프로그래밍

프로그램 뼈대 만들기 객체들간의 메시지 통신 세가지 객체들은 서로 통신되어야 함 HOW? 객체들 사이에서 데이터나 함수의 상호참조를 위해 유용한 함수를 제공함 4주차 - MFC를 이용한 영상처리 프로그래밍

프로그램 뼈대 만들기 Document 클래스(CtestDoc)에 마우스를 두고 오른쪽 버튼을 누르면 메뉴가 나타남 이 메뉴상에서 <Add Member Variable…>을 선택 클래스에 새로운 멤버변수를 추가하고자 할 경우에 사용함 4주차 - MFC를 이용한 영상처리 프로그래밍

프로그램 뼈대 만들기 입력대화상자가 나타나고, 각 변수 타입과 변수이름, 접근 방법을 물어본다. 다음과 같이 설정하라. 변수명 접근방법 unsigned char m_InImg[256][256] Public m_OutImg[256][256] 4주차 - MFC를 이용한 영상처리 프로그래밍

프로그램 뼈대 만들기 다음과 같이 나타남 4주차 - MFC를 이용한 영상처리 프로그래밍

프로그램 뼈대 만들기 프로그램 타입 Single Document Multiple 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 정적 링크 라이브러리 연동하기 윈도우 검색 메뉴를 이용하여, 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() 재정의 프레임 윈도우(frame window) 클래스 메뉴, 툴바, 상태바 등 프로그램을 구성하는 부분을 담당하는 클래스 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주차 - 디지털영상처리의개념

영상 읽기 영상 크기에 맞추어 스크롤 지원하기 Oninitialupdate()멤버 함수를 클릭하여 다음과 같이 코딩하기 2주차 - 디지털영상처리의개념

영상 읽기 다음과 같이 수정하시오. 2주차 - 디지털영상처리의개념

영상 읽기 실행결과 2주차 - 디지털영상처리의개념

영상 읽기 처음 실행 시 나타나는 창 제거하기 Workspace 창의 class View 탭에서 … 메인 프로임 윈도우 클래스인 CFirstCxImageApp의 InitInstance() 함수를 확인하기 다음과 같이 수정하기 2주차 - 디지털영상처리의개념

영상 읽기 그 외의 다른 방법 실행해보기 if (!ProcessShellCommand(cmdInfo)) return FALSE; 위의 내용을 주석 처리해서 실행하지 못하도록 막으면 새로운 창이 나타나지 않음. 실행해보기 2주차 - 디지털영상처리의개념

영상 읽기 드래그 앤 드롭으로 영상 파일 열기 프로그램에 영상 파일을 끌어다 놓으면 이를 감지하고 파일을 열어주기 Instance() 함수에 다음을 추가하자. 2주차 - 디지털영상처리의개념

영상 읽기 영상의 크기에 맞춰 보여주기 창의 크기와 영상의 원래 크기가 일치하지 않으므로 이를 수정하기 영상의 크기에 맞춰 창이 보여지게끔 해보자. [Class View]탭에서 CChildFrame 클래스를 선택하기 마우스 오른쪽 버튼을 눌러 팝업 메뉴 중 [Add Virtual Function]을 선택하기 가상 함수 ActiveFrame 멤버 함수를 선택, [Add & Edit] 버튼 클릭 ActiveFrame 멤버 함수 자식 프레임 클래스(child frame class)의 형태를 정의하는 것 메인 프레임 클래스는 부모 프레임 클래스를 지칭함 2주차 - 디지털영상처리의개념

영상 읽기 다음과 같이 소스 수정 및 추가하기 2주차 - 디지털영상처리의개념

영상 읽기 앞의 클래스 내의 헤더파일 추가하기 #include "FirstCxImageDoc.h" 2주차 - 디지털영상처리의개념

영상 저장 영상 저장을 위해 OnSaveDocument() 함수를 재정의 하고, 파일명을 넘겨받아 처리하는 루틴을 추가하기 도큐먼트 클래스의 소스인 CFirstCxImageDoc 에 추가하기 오른쪽 마우스 버튼 클릭 후, [Add Virtual Function] 선택하기 2주차 - 디지털영상처리의개념

영상 저장 가상 함수 중 OnSaveDocument()를 선택 하후, [Add & Edit]버튼을 클릭하고 소스 작성하기 2주차 - 디지털영상처리의개념

영상 저장 사실상, CxImage에서는 총 15개의 포맷을 지원 ximage.h 의 포맷 내용을 보면… enum ENUM_CXIMAGE_FORMATS{ CXIMAGE_FORMAT_UNKNOWN, CXIMAGE_FORMAT_BMP, CXIMAGE_FORMAT_GIF, CXIMAGE_FORMAT_JPG, CXIMAGE_FORMAT_PNG, CXIMAGE_FORMAT_MNG, CXIMAGE_FORMAT_ICO, CXIMAGE_FORMAT_TIF, CXIMAGE_FORMAT_TGA, CXIMAGE_FORMAT_PCX, CXIMAGE_FORMAT_WBMP, 2주차 - 디지털영상처리의개념

영상 저장 물론, 소스를 변경시키면 다른 포맷 역시도 지원 가능함 CXIMAGE_FORMAT_WMF, CXIMAGE_FORMAT_J2K, CXIMAGE_FORMAT_JBG, CXIMAGE_FORMAT_JP2, CXIMAGE_FORMAT_JPC, CXIMAGE_FORMAT_PGX, CXIMAGE_FORMAT_PNM, CXIMAGE_FORMAT_RAS, }; 물론, 소스를 변경시키면 다른 포맷 역시도 지원 가능함 2주차 - 디지털영상처리의개념

영상 저장 클래스의 역할 MFC AppWizard를 이용하여 FirstCxImage 프로젝트를 생성하면 여섯 개의 클래스가 생성됨 C FirstCxImageDoc 클래스 여기에서 Doc는 문서(Document)를 의미함 데이터의 저장이나 변환 등과 같이 실질적인 데이터 처리를 담당 C FirstCxImageView 클래스 CImageProDoc 클래스에서 처리된 데이터를 출력 장치를 통하여 보여주는 역할 수행 CMainFrame 클래스 프로그램 전체 윈도우에 대한 관리 담당 2주차 - 디지털영상처리의개념

영상 저장 CChildFrame 클래스 CAboutDlg 클래스 C FirstCxImageApp 클래스 프로그램 윈도우 안에 생성되는 여러 개의 서브윈도우에 대한 관리 담당 CAboutDlg 클래스 프로그램의 [도움말] 메뉴의 “FirstCxImage 정보“라는 항목을 선택하면 나타나는 대화상자에 대한 관리 담당 C FirstCxImageApp 클래스 FirstCxImage 프로그램 전체에 대한 관리를 담당 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 지터 효과(jitter effect) 이미지의 각 픽셀에서 각 랜덤 값을 추가함 지터 효과를 제공하는 라이브러리 함수의 특징 Bool CxImage::Jitter(long radius = 2)[inherited] Parameter Radius – maximum pixel displacement Returns True if everthing is ok 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 Jitter() 소스 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 프로그램에 메뉴 추가하여 지터 메뉴 삽입 [Resource View]탭에서 메뉴 IDC_FIRSTCTYPE을 선택 도움말 뒤에 메뉴 추가하기 도움말 뒤에 마우스 커서를 가져다 놓고 오른쪽 마우스 클릭하면 메뉴 중 [Properties]를 선택 메뉴 1장 아래로 또 다시 메뉴를 추가하기 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 지터 함수 호출 메뉴를 선택할때 jitter()함수를 호출하여 실행할 곳이 필요함. 메뉴의 jitter – cximage를 선택하면 jitter()함수가 호출되도록 설정하기 연결할 메뉴를 선택 오른쪽 마우스버튼 클릭하면 메뉴 중 [ClassWizard]를 선택하기 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 다음과 같이 설정하고, [Add Function]버튼을 클릭하기 [Add Member Function]창이 뜨면…[ok]버튼 클릭 Member functions에 앞의 함수 이름이 추가됨 Edit Code버튼을 눌러 소스 작성을 위해 포커스 이동 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 다음과 같이 JITTER함수를 호출할 소스 입력하기 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 실행하기 Jitter 실행 결과 보기 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 클립보드 복사, 붙여넣기 원 영상에 jitter() 함수의 결과가 덮여쓰여짐 클립보드 복사와 붙여 넣기를 통해 원 영상을 미리 복사하기 새로운 창에 같은 원 영상을 붙여 넣기 클립보드 특정 프로그램의 데이터를 다른 프로그램으로 데이터를 넘겨줄 수 있도록 해주는 기능 데이터의 포맷을 제대로 지원한다면 어디서나 사용 가능 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 클립보드 복사하기 [Class View] 탭을 선택하고, CFirstCxImageDoc를 선택하여 새로운 함수 CopyClipBoard()를 추가하기 추가된 CopyClipBoard()에 다음의 코드 삽입하기 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 앞의 소스를 통해서 클립보드 복사 영역의 소스를 구현했지만 이를 연결해야 함. 메뉴 중 [편집  복사]에 연결하기 메뉴 [편집  복사]를 선택한 후, 오른쪽 마우스 버튼 클릭하면 나타나는 메뉴 중 [ClassWizard]를 선택 클래스 위저드를 다음과 같이 설정하고, [Add Function]버튼을 클릭한다. Add member function 창에 함수이름을 설정하고 [ok]버튼을 클릭하면, 클래스 위저드 창의 Member function에 추가되고 Edit Code 버튼 클릭 후, 소스를 작성하자. 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 소스는 다음과 같이 작성 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 클립보드 붙이기 [편집]-[붙여넣기] 메뉴를 통해서 소스를 작성하자. 여기서는 도큐먼트 클래스가 아니라 프레임 윈도우를 이용함 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 다음과 같이 코드 작업하기 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 소스(1) void CFirstCxImageApp::OnEditPaste() { // TODO: Add your command handler code here POSITION pos = GetFirstDocTemplatePosition(); CDocTemplate *pTemplate = GetNextDocTemplate(pos); CFirstCxImageDoc *pDoc = (CFirstCxImageDoc* )pTemplate->OpenDocumentFile(NULL); if( pDoc ){ HANDLE hBitmap=NULL; if (::OpenClipboard(AfxGetMainWnd()->GetSafeHwnd())) hBitmap = ::GetClipboardData(CF_DIB); if( hBitmap ) pDoc->m_pImage = new CxImage(); pDoc->m_pImage->CreateFromHANDLE(hBitmap); 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 소스(2) POSITION pos = pDoc->GetFirstViewPosition(); CFirstCxImageView *pView = (CFirstCxImageView *)pDoc->GetNextView(pos); CSize sizeTotal = CSize(pDoc->m_pImage->GetWidth(), pDoc->m_pImage->GetHeight()); pView->SetScrollSizes(MM_TEXT, sizeTotal); pView->ResizeParentToFit(FALSE); } ::CloseClipboard(); 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 hBitmap = ::GetClipboardData(CF_DIB)에서 CF_DIB 데이터가 존재해야 함. OnEditPaste() 함수 전에 호출되는 OnUpdateEditPaster()함수를 이용해서 CF_DIF를 활성화시킴 [Add Function] 클릭 [Edit Code] 버튼 클릭 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 다음과 같이 소스 작성하기 2주차 - 디지털영상처리의개념

예제로 지터 효과 주기 실행하기 2주차 - 디지털영상처리의개념

직접 구현한 지터 효과주기 앞의 방법 직접 구현해보자. 공개된 라이브러리를 통해서 작성한 방식 파일 읽기, 저장, 보기 함수만을 이용하고 실제 다른 영상 처리 기법들은 우리가 구현해보도록 하자. 2주차 - 디지털영상처리의개념

직접 구현한 지터 효과주기 직접 구현하기 위한 작업 다양한 영상 처리를 지원해줄 클래스를 만들자. 새로운 클래스 생성하기 클래스의 옵션을 다음과 같이 설정하기 클래스 타입 Generic Class Name Cfilter 2주차 - 디지털영상처리의개념

직접 구현한 지터 효과주기 Filter.h 헤더파일 작성하기 [File View] 탭에 접근하여 코드 추가하기 2주차 - 디지털영상처리의개념

직접 구현한 지터 효과주기 Filter.cpp 작성하기 소스 내에 #include "math.h“를 추가하기 그리고 기본 소스는 다음과 같이 추가함 2주차 - 디지털영상처리의개념

직접 구현한 지터 효과주기 소스(1) void CFilter::GS_Jitter( CxImage *m_pImage, long radius ){ RGBQUAD color; int i, j; int rnd_height, rnd_width; int height = m_pImage->GetHeight(); int width = m_pImage->GetWidth(); for(i=0; i<height; i++) { for(j=0; j<width; j++) { rnd_height = i+(long)((rand()/(float)RAND_MAX - 0.5)*(radius*2)); rnd_width = j+(long)((rand()/(float)RAND_MAX - 0.5)*(radius*2)); 2주차 - 디지털영상처리의개념

직접 구현한 지터 효과주기 소스(2) if( rnd_height > height || rnd_width > width ) { rnd_height = height; rnd_width = width; } color = m_pImage->GetPixelColor(rnd_width, rnd_height); m_pImage->SetPixelColor(j, i, color); return; 2주차 - 디지털영상처리의개념

직접 구현한 지터 효과주기 작성한 지터 효과를 메뉴에 연결하기 2주차 - 디지털영상처리의개념

직접 구현한 지터 효과주기 메뉴에서 클래스 위저드로 접근하여 다음과 같이 설정함 2주차 - 디지털영상처리의개념

직접 구현한 지터 효과주기 다음과 같이 연결하기 위한 코드 작성하기 먼저, 헤더 파일 추가하기 Filter 클래스의 내용을 끌어다 사용하므로 헤더파일에 추가해야 함 2주차 - 디지털영상처리의개념

직접 구현한 지터 효과주기 실제 지터함수를 연결하는 코드 작성하기 2주차 - 디지털영상처리의개념

직접 구현한 지터 효과주기 실행하기 2주차 - 디지털영상처리의개념

수행 시간 측정하기 수행 시간 측정 메모리를 많이 차지하는 영상 처리 시간이 관건 다양한 알고리즘 중 성능을 평가하기 위한 의도로 수행 시간을 측정함 각 영상 처리의 수행 시간을 Debug 결과를 통해서 알려주려 함 수행 시간을 보는 방법 TRACE 매크로를 이용하는 방법 디버그 모드가 아니라 릴리즈 모드에서 볼 수 있음 Debug View를 통해서 확인하는 방법 사용할 방법 가벼운 디버깅 모니터링 도구인 Debug View를 이용하여 수행 시간 확인 2주차 - 디지털영상처리의개념