영상 처리 기초부터 고급 알고리즘까지 폭넓게 담았다 다양한 영상 처리 알고리즘을 초보자도 쉽게 이해하고 흥미를 가질 수 있도록 쉬운 용어로 설명한다. 영상 처리 기초부터 시작하여 영상 이해에 필요한 다양한 기법을 하나 둘씩 덧붙여 가도록 구성했다. 복잡한 이론을 직접 C++ 언어로 구현하여 실습해보면서 알고리즘에 대한 이해도를 높인다. Visual C++ 2015를 사용하여 제대로 된 영상 처리 프로그램을 만들어보자 최신 개발툴과 C++ 기법을 사용하여 이론으로 배운 다양한 영상 처리 기법을 직접 구현한다. 본문에 나온 내용을 따라만 하면 제대로 된 영상 처리 프로그램을 완성할 수 있다. 영상을 표현하는 클래스와 영상 처리 함수 구조를 깔끔하게 디자인하여 직관적으로 코드를 해석할 수 있다.
지은이 서문 지은이 소개
1장 영상 처리의 개요 __1.1 영상 처리의 개요 ____1.1.1 디지털 영상 처리란? ____1.1.2 다양한 영상 처리 응용 분야 __1.2 영상 처리 프로그래밍 ____1.2.1 영상 표현 방법 ____1.2.2 2차원 배열 처리 ____1.2.3 변형된 2차원 배열 동적 할당
2장 Visual C++ 프로그래밍 __2.1 Visual Studio 개발 환경 구축 ____2.1.1 Windows 프로그래밍과 Visual C++ ____2.1.2 Visual Studio Community 에디션 설치하기 __2.2 First 프로그램 예제 ____2.2.1 새 프로젝트 만들기 ____2.2.2 MFC 응용 프로그램 마법사 ____2.2.3 Visual Studio 구조 ____2.2.4 프로그램 빌드 및 실행 __2.3 MFC 프로그램 소스 코드 분석 ____2.3.1 MFC 클래스들 간의 상관 관계 ____2.3.2 CFirstApp 클래스 분석 ____2.3.3 CMainFrame 클래스 분석 ____2.3.4 CChildFrame 클래스 분석 ____2.3.5 CFirstDoc 클래스 분석 ____2.3.6 CFirstView 클래스 분석 __2.4 Visual Studio Community 2015 기능 살펴보기 ____2.4.1 클래스 마법사 ____2.4.2 유용한 기능들
3장 BMP 파일의 이해 __3.1 비트맵 개요 ____3.1.1 비트맵 정의와 종류 __3.2 BMP 파일의 이해 ____3.2.1 BMP 파일의 전체 구조 ____3.2.2 비트맵 파일 헤더 ____3.2.3 비트맵 정보 헤더 ____3.2.4 색상 테이블(팔레트) ____3.2.5 픽셀 데이터 __3.3 실제 BMP 파일의 분석 ____3.3.1 그레이스케일 BMP 파일의 분석 ____3.3.2 트루컬러 BMP 파일의 분석 __3.4 BMP 영상을 화면에 출력하기 ____3.4.1 DIB 화면 출력 함수(SetDIBitsToDevice와 StretchDIBits) ____3.4.2 BmpShow 프로그램 작성
4장 영상 클래스 만들기 __4.1 영상 클래스 설계 ____4.1.1 IppDib와 IppImage 클래스 ____4.1.2 IppCreate 프로젝트 생성하기 __4.2 IppDib 클래스 만들기 ____4.2.1 IppDib 클래스 추가 ____4.2.2 비트맵 생성과 소멸 ____4.2.3 BMP 파일 입출력(불러오기 및 저장하기) ____4.2.4 비트맵 화면 출력 ____4.2.5 클립보드 지원(복사 및 붙여넣기) ____4.2.6 기타 유용한 기능(연산자 재정의, 비트맵 정보 제공 등) __4.3 IppImage 클래스 만들기 ____4.3.1 IppImage 클래스 추가 ____4.3.2 다양한 자료형 지원(템플릿 클래스) ____4.3.3 영상 생성과 소멸 ____4.3.4 픽셀 값 접근 기능 ____4.3.5 기타 유용한 기능(연산자 재정의, 비트맵 정보 제공 등) ____4.3.6 RGBBYTE 클래스 정의 __4.4 IppDib와 IppImage 클래스 상호 변환 ____4.4.1 IppDib와 IppImage 클래스 변환 방법 ____4.4.2 IppDib와 IppImage 클래스의 상호 변환 구현 __4.5 IppDib 클래스 사용하기 ____4.5.1 IppDib 클래스를 사용하여 BMP 파일 화면 출력하기
5장 영상 처리 프로그램 틀 만들기 __5.1 ImageTool 프로그램 만들기 ____5.1.1 ImageTool 프로젝트 생성 ____5.1.2 영상 클래스 추가하기 ____5.1.3 BMP 파일 불러오기와 저장하기 ____5.1.4 화면 출력 기능 추가하기 ____5.1.5 프로그램 구동 시 빈 창 띄우지 않기 ____5.1.6 창 크기를 영상의 크기에 맞추기 ____5.1.7 영상의 바깥 영역에 빗금 그리기 __5.2 영상 새로 만들기 기능 구현 (대화 상자 만들기) ____5.2.1 새 대화 상자를 만드는 순서 ____5.2.2 새 대화 상자 추가 ____5.2.3 대화 상자 디자인(컨트롤 배치) ____5.2.4 대화 상자에 대한 클래스 추가 ____5.2.5 대화 상자 컨트롤에 대한 멤버 변수 추가 ____5.2.6 대화 상자 화면에 나타내기 __5.3 영상을 새 창으로 띄우기 (메뉴 및 메뉴 이벤트 처리기 추가) ____5.3.1 영상을 새 창으로 띄우기 위한 프로그램 구조 ____5.3.2 새 메뉴 항목 추가 ____5.3.3 메뉴 이벤트 처리기 추가 ____5.3.4 복사 및 붙여넣기 기능 구현 __5.4 영상을 확대하여 보기(툴바 추가) ____5.4.1 영상을 확대하여 출력하기 ____5.4.2 영상 확대하여 보기 메뉴 및 메뉴 이벤트 처리기 추가 ____5.4.3 툴바 버튼 추가 ____5.5.1 영상 정보 출력창 구성 ____5.5.2 출력창에 영상 정보 표시하기 ____5.5.3 상태바 구역 나누기 ____5.5.4 상태바에 영상 정보 표시
6장 화질 향상 기법 __6.1 영상 반전하기 ____6.1.1 IppImage 클래스를 이용한 픽셀 값 접근 방법 ____6.1.2 영상의 반전이란? ____6.1.3 영상 반전 구현 ____6.1.4 영상 반전 메뉴 만들기 ____6.1.5 매크로 함수를 이용한 코드 간소화 __6.2 밝기와 명암비 조절 ____6.2.1 밝기 조절 ____6.2.2 명암비 조절 ____6.2.3 밝기/명암비 조절 대화 상자 만들기 ____6.2.4 대화 상자 초기화 및 컨트롤 동작 제어 ____6.2.5 밝기/명암비 조절 메뉴 만들기 __6.3 감마 보정 ____6.3.1 지수 법칙 변환과 감마 보정 ____6.3.2 감마 보정 구현 ____6.3.3 실숫값을 입력 받는 감마 보정 대화 상자 만들기 ____6.3.4 대화 상자 초기화 및 컨트롤 동작 제어 ____6.3.5 감마 보정 메뉴 만들기 __6.4 히스토그램 분석 ____6.4.1 히스토그램이란? ____6.4.2 히스토그램 대화 상자 만들기 ____6.4.3 대화 상자에 히스토그램 그리기 ____6.4.4 히스토그램 보기 메뉴 만들기 __6.5 히스토그램 스트레칭과 균등화 ____6.5.1 히스토그램 스트레칭 ____6.5.2 히스토그램 균등화 ____6.5.3 히스토그램 스트레칭과 균등화 메뉴 만들기
7장 영상의 산술 및 논리 연산 __7.1 영상의 산술 연산 ____7.1.1 덧셈 연산 ____7.1.2 뺄셈 연산 ____7.1.3 평균 연산 ____7.1.4 차이 연산 __7.2 영상의 논리 연산 ____7.2.1 AND 연산 ____7.2.2 OR 연산 __7.3 산술 및 논리 연산 기능 구현 ____7.3.1 도큐먼트 리스트를 받아오는 방법 ____7.3.2 산술 및 논리 연산 대화 상자 만들기 ____7.3.3 대화 상자에 도큐먼트 선택 기능 추가하기 ____7.3.4 산술 및 논리 연산 메뉴 및 메뉴 이벤트 추가 __7.4 비트 평면 분할 ____7.4.1 비트 평면이란? ____7.4.2 비트 평면 분할 메뉴 및 메뉴 이벤트 처리기 추가 ____7.4.3 모든 창 닫기 기능 추가
8장 다양한 공간적 필터링 기법 __8.1 공간적 필터링 ____8.1.1 공간적 필터링의 기본 개념 ____8.1.2 공간적 필터링의 구현 방법 __8.2 영상 부드럽게 만들기 ____8.2.1 평균 값 필터 ____8.2.2 가중 평균 값 필터 ____8.2.3 가우시안 필터 ____8.2.4 가우시안 필터 대화 상자 만들기 ____8.2.5 영상 부드럽게 만들기 메뉴 만들기 __8.3 영상 날카롭게 만들기 ____8.3.1 언샤프 마스크 필터링 ____8.3.2 라플라시안을 이용한 언샤프 마스크 필터 구현 ____8.3.3 하이부스트 필터 ____8.3.4 영상 날카롭게 만들기 메뉴 만들기 __8.4 잡음 생성 ____8.4.1 가우시안 잡음 생성 ____8.4.2 소금&후추 잡음 생성 ____8.4.3 잡음 추가 대화 상자 만들기 ____8.4.4 잡음 추가 메뉴 만들기 __8.5 잡음 제거를 위한 비선형 필터 ____8.5.1 미디언 필터 ____8.5.2 미디언 필터 메뉴 만들기 ____8.5.3 비등방성 확산 필터 ____8.5.4 비등방성 확산 대화 상자 만들기 ____8.5.5 비등방성 확산 필터 메뉴 만들기
9장 영상의 기하학적 변환 __9.1 영상의 이동 변환 ____9.1.1 이동 변환이란? ____9.1.2 이동 변환의 구현 ____9.1.3 이동 변환 대화 상자 만들기 ____9.1.4 이동 변환 메뉴 만들기 __9.2 영상의 크기 변환 ____9.2.1 크기 변환과 보간법 ____9.2.2 최근방 이웃 보간법 ____9.2.3 양선형 보간법 ____9.2.4 3차 회선 보간법 ____9.2.5 크기 변환 대화 상자 만들기 ____9.2.6 크기 변환 대화 상자 초기화 및 컨트롤 동작 제어 ____9.2.7 크기 변환 메뉴 만들기 __9.3 영상의 회전 변환 ____9.3.1 회전 변환에 관한 이론적 설명 ____9.3.2 임의의 각도 회전 구현 ____9.3.3 특수 각도에 대한 회전 구현 ____9.3.4 회전 변환 대화 상자 만들기 ____9.3.5 회전 변환 메뉴 만들기 __9.4 영상의 대칭 변환 ____9.4.1 좌우 대칭 ____9.4.2 상하 대칭 ____9.4.3 좌우 대칭과 상하 대칭 메뉴 만들기
10장 주파수 공간에서의 영상 처리 __10.1 주파수 공간의 이해 ____10.1.1 1차원 데이터에 대한 이산 푸리에 변환 ____10.1.2 1차원 데이터에 대한 이산 푸리에 변환의 구현 __10.2 영상의 푸리에 변환 ____10.2.1 2차원 영상의 푸리에 변환 ____10.2.2 2차원 영상의 푸리에 변환 구현 ____10.2.3 개선된 2차원 영상의 푸리에 변환 ____10.2.4 DFT와 DFTRC 메뉴 만들기 __10.3 고속 푸리에 변환 ____10.3.1 고속 푸리에 변환의 이론적 배경 ____10.3.2 2차원 영상의 고속 푸리에 변환 ____10.3.3 FFT 메뉴 만들기 __10.4 주파수 공간에서의 필터링 ____10.4.1 이상적 저역 및 고역 통과 필터 ____10.4.2 가우시안 저역 및 고역 통과 필터 ____10.4.3 주파수 공간 필터링 대화 상자 만들기 ____10.4.4 주파수 공간 필터링 메뉴 만들기
11장 영상의 특징값 추출 방법 __11.1 마스크를 이용한 엣지 검출 ____11.1.1 엣지와 함수 그래디언트 ____11.1.2 마스크 기반 엣지 검출 ____11.1.3 마스크 기반 엣지 검출기 구현 ____11.1.4 마스크 기반 엣지 검출 메뉴 만들기 __11.2 캐니 엣지 검출기 ____11.2.1 캐니 엣지 검출 방법 ____11.2.2 캐니 엣지 검출기 구현 ____11.2.3 캐니 엣지 검출 대화상자 만들기 ____11.2.4 캐니 엣지 검출 메뉴 만들기 __11.3 허프 변환을 이용한 직선 검출 ____11.3.1 허프 변환을 이용한 직선 검출 방법 ____11.3.2 룩업 테이블을 이용한 허프 변환의 구현 ____11.3.3 허프 변환 메뉴 만들기 __11.4 해리스 코너 포인트 검출 방법 ____11.4.1 해리스 코너 검출 방법 ____11.4.2 해리스 코너 검출 구현 ____11.4.3 해리스 코너 검출 대화 상자 추가 ____11.4.4 해리스 코너 검출 메뉴 만들기
12장 컬러 영상 처리 __12.1 트루컬러 비트맵 다루기 ____12.1.1 IppImage 클래스에서 컬러 픽셀 참조 방법 ____12.1.2 트루컬러 영상의 반전 ____12.1.3 트루컬러 영상을 그레이스케일 영상으로 변환 ____12.1.4 그레이스케일로 변환 메뉴 만들기 __12.2 다양한 색 모델 ____12.2.1 색상 표현 방법 ____12.2.2 RGB 색 모델 ____12.2.3 HSI 색 모델 ____12.2.4 YUV 색 모델 __12.3 색상 평면 나누기와 합치기 ____12.3.1 색상 평면 나누기 ____12.3.2 색상 평면 나누기 메뉴 만들기 ____12.3.3 색상 평면 합치기 ____12.3.4 색상 평면 합치기 대화 상자 만들기 ____12.3.5 색상 평면 합치기 메뉴 만들기 __12.4 컬러 영상 처리 ____12.4.1 컬러 엣지 검출 ____12.4.2 컬러 엣지 검출 메뉴 만들기 ____12.4.3 컬러 영상의 히스토그램 균등화
13장 영상 분할 __13.1 이진화 기법 ____13.1.1 영상의 이진화 ____13.1.2 반복적 방법을 이용한 이진화 임계값 결정 방법 ____13.1.3 미리보기 기능이 있는 이진화 대화 상자 만들기 ____13.1.4 이진화 메뉴 만들기 __13.2 레이블링 ____13.2.1 고전적 레이블링 기법 ____13.2.2 고전적 레이블링 기법 구현 ____13.2.3 레이블링 메뉴 만들기 __13.3 외곽선 추적 ____13.3.1 외곽선 추적 기법 ____13.3.2 외곽선 추적 메뉴 만들기
14장 모폴로지 연산 __14.1 이진 영상의 모폴로지 연산 ____14.1.1 모폴로지를 위한 기본 정의 ____14.1.2 이진 영상의 침식과 팽창 ____14.1.3 이진 영상의 열기와 닫기 연산 ____14.1.4 이진 영상의 모폴로지 메뉴 만들기 ____14.1.5 모폴로지 기법을 응용한 외곽선 검출 __14.2 그레이스케일 영상의 모폴로지 연산 ____14.2.1 그레이스케일 영상의 침식과 팽창 연산 ____14.2.2 그레이스케일 영상의 열기와 닫기 연산 ____14.2.3 그레이스케일 영상의 모폴로지 메뉴 만들기
15장 모양 기술자 __15.1 외곽선 기반의 푸리에 기술자 ____15.1.1 푸리에 기술자 ____15.1.2 푸리에 기술자 대화 상자 만들기 ____15.1.3 푸리에 기술자 메뉴 만들기 __15.2 영역 기반의 불변 모멘트 ____15.2.1 불변 모멘트 ____15.2.2 불변 모멘트 메뉴 만들기 __15.3 저니키 모멘트 ____15.3.1 저니키 모멘트 ____15.3.2 저니키 모멘트의 구현 ____15.3.3 저니키 모멘트 메뉴 만들기 ____15.4.1 템플릿 매칭 __15.4 템플릿 매칭 ____15.4.2 템플릿 매칭 메뉴 만들기
16장 동영상 처리 __16.1 AVI 파일 처리하기 ____16.1.1 AVI 파일의 구조와 사용법 ____16.1.2 IppAvi 클래스 만들기 __16.2 AVI 플레이어 만들기 ____16.2.1 새 도큐먼트 템플릿 등록하기 ____16.2.2 IppAvi 클래스를 이용한 동영상 재생 ____16.2.3 동영상 재생을 위한 툴바 만들기 ____16.2.4 동영상 재생을 위한 코드 작성 __16.3 움직임 벡터 추정 ____16.3.1 블록 매칭 움직임 추정 방법 ____16.3.2 IppFullSearch 클래스 만들기 ____16.3.3 움직임 벡터 메뉴 만들기
부록 A JPEG 파일 지원 __A.1 JPEG 라이브러리 사용 ____A.1.1 JPEG 압축 원리 ____A.1.2 JPEG 라이브러리 빌드하기 ____A.1.3 JPEG 라이브러리 사용하기
부록 B OpenCV 사용하기 __B.1 OpenCV 개요와 설치 __B.2 OpenCV 영상 표현 방법 __B.3 ImageTool 프로젝트에서 OpenCV 사용하기 __B.4 OpenCV 사용 예제
찾아보기 실습 찾아보기
ㆍ지은이
황선규
소개
2006년 한양대학교에서 영상 처리 전공으로 박사 학위를 받았으며, 이후 뉴질랜드 캔터베리 대학교와 한양대학교에서 박사후과정(PostDoc)과 연구 교수로 재직하였다. 2009년 LG전자 MC연구소에 입사하여 전략 스마트폰 카메라 기능 개발과 안드로이드 카메라 프레임워크 업무를 담당하였다. 2016년부터 (주)패스트캠퍼스에서 OpenCV와 컴퓨터 비전 강의를 진행하고 있고, 2019년부터는 ‘프로그래머스’ 사이트를 통해 코딩 테스트와 알고리즘 강의도 진행하고 있다. 저서로는 『OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝』, 『Visual C++ 영상 처리 프로그래밍』, 『영상 처리 프로그래밍 by Visual C++』, 역서로는 『OpenCV 제대로 배우기』가 있다.
독자의견 남기기