Visual C++ 영상 처리 프로그래밍
이론과 실습이 어우러진 영상 처리 완벽 입문서
영상 처리 기초부터 고급 알고리즘까지 폭넓게 담았다다양한 영상 처리 알고리즘을 초보자도 쉽게 이해하고 흥미를 가질 수 있도록 쉬운 용어로 설명한다. 영상 처리 기초부터 시작하여 영상 이해에 필요한 다양한 기법을 하나 둘씩 덧붙여 가도록 구성했다. 복잡한 이론을 직접 C++ 언어로 구현하여 실습해보면서 알고리즘에 대한 이해도를 높인다.
Visual C++ 2015를 사용하여 제대로 된 영상 처리 프로그램을 만들어보자최신 개발툴과 C++ 기법을 사용하여 이론으로 배운 다양한 영상 처리 기법을 직접 구현한다. 본문에 나온 내용을 따라만 하면 제대로 된 영상 처리 프로그램을 완성할 수 있다. 영상을 표현하는 클래스와 영상 처리 함수 구조를 깔끔하게 디자인하여 직관적으로 코드를 해석할 수 있다.
대상 독자- 학부 3학년 수준의 영상 처리 프로그래밍 수업을 듣는 대학생
- 프로그래밍의 기초가 없는 C/C++ 대학원생 및 개발자
- 이미지 분석, CCTV, 사물 인식, 얼굴
«Visual C++ 영상 처리 프로그래밍»은 11장까지만 공개합니다.
전자책 구입
목차
- 1장. 영상 처리의 개요
- 1.1 | 영상 처리의 개요
- 디지털 영상 처리란?
- 다양한 영상 처리 응용 분야
- 1.2 | 영상 처리 프로그래밍
- 영상 표현 방법
- 2차원 배열 처리
- 변형된 2차원 배열 동적 할당
- 2장. Visual C++ 프로그래밍
- 2.1 | Visual Studio 개발 환경 구축
- Windows 프로그래밍과 Visual C++
- Visual Studio Community 에디션 설치하기
- 2.2 | First 프로그램 예제
- 새 프로젝트 만들기
- MFC 응용 프로그램 마법사
- Visual Studio 구조
- 프로그램 빌드 및 실행
- 2.3 | MFC 프로그램 소스 코드 분석
- MFC 클래스들 간의 상관 관계
- CFirstApp 클래스 분석
- CMainFrame 클래스 분석
- CChildFrame 클래스 분석
- CFirstDoc 클래스 분석
- CFirstView 클래스 분석
- 2.4 | Visual Studio Community 2015 기능 살펴보기
- 클래스 마법사
- 유용한 기능들
- 3장. BMP 파일의 이해
- 3.1 | 비트맵 개요
- 비트맵 정의와 종류
- 3.2 | BMP 파일의 이해
- BMP 파일의 전체 구조
- 비트맵 파일 헤더
- 비트맵 정보 헤더
- 색상 테이블(팔레트)
- 픽셀 데이터
- 3.3 | 실제 BMP 파일의 분석
- 그레이스케일 BMP 파일의 분석
- 트루컬러 BMP 파일의 분석
- 3.4 | BMP 영상을 화면에 출력하기
- DIB 화면 출력 함수(SetDIBitsToDevice와 StretchDIBits)
- BmpShow 프로그램 작성
- 4장. 영상 클래스 만들기
- 4.1 | 영상 클래스 설계
- IppDib와 IppImage 클래스
- IppCreate 프로젝트 생성하기
- 4.2 | IppDib 클래스 만들기
- IppDib 클래스 추가
- 비트맵 생성과 소멸
- BMP 파일 입출력(불러오기 및 저장하기)
- 비트맵 화면 출력
- 클립보드 지원(복사 및 붙여넣기)
- 기타 유용한 기능(연산자 재정의, 비트맵 정보 제공 등)
- 4.3 | IppImage 클래스 만들기
- IppImage 클래스 추가
- 다양한 자료형 지원(템플릿 클래스)
- 영상 생성과 소멸
- 픽셀 값 접근 기능
- 기타 유용한 기능(연산자 재정의, 비트맵 정보 제공 등)
- RGBBYTE 클래스 정의
- 4.4 | IppDib와 IppImage 클래스 상호 변환
- IppDib와 IppImage 클래스 변환 방법
- IppDib와 IppImage 클래스의 상호 변환 구현
- 4.5 | IppDib 클래스 사용하기
- IppDib 클래스를 사용하여 BMP 파일 화면 출력하기
- 5장. 영상 처리 프로그램 틀 만들기
- 5.1 | ImageTool 프로그램 만들기
- ImageTool 프로젝트 생성
- 영상 클래스 추가하기
- BMP 파일 불러오기와 저장하기
- 화면 출력 기능 추가하기
- 프로그램 구동 시 빈 창 띄우지 않기
- 창 크기를 영상의 크기에 맞추기
- 영상의 바깥 영역에 빗금 그리기
- 5.2 | 영상 새로 만들기 기능 구현(대화 상자 만들기)
- 새 대화 상자를 만드는 순서
- 새 대화 상자 추가
- 대화 상자 디자인(컨트롤 배치)
- 대화 상자에 대한 클래스 추가
- 대화 상자 컨트롤에 대한 멤버 변수 추가
- 대화 상자 화면에 나타내기
- 5.3 | 영상을 새 창으로 띄우기(메뉴 및 메뉴 이벤트 처리기 추가)
- 영상을 새 창으로 띄우기 위한 프로그램 구조
- 새 메뉴 항목 추가
- 메뉴 이벤트 처리기 추가
- 복사 및 붙여넣기 기능 구현
- 5.4 | 영상을 확대하여 보기(툴바 추가)
- 영상을 확대하여 출력하기
- 영상 확대하여 보기 메뉴 및 메뉴 이벤트 처리기 추가
- 툴바 버튼 추가
- 5.5 | 영상 정보 표시하기(출력창과 상태바 처리하기)
- 영상 정보 출력창 구성
- 출력창에 영상 정보 표시하기
- 상태바 구역 나누기
- 상태바에 영상 정보 표시
- 6장. 화질 향상 기법
- 6.1 | 영상 반전하기
- IppImage 클래스를 이용한 픽셀 값 접근 방법
- 영상의 반전이란?
- 영상 반전 구현
- 영상 반전 메뉴 만들기
- 매크로 함수를 이용한 코드 간소화
- 6.2 | 밝기와 명암비 조절
- 밝기 조절
- 명암비 조절
- 밝기/명암비 조절 대화 상자 만들기
- 대화 상자 초기화 및 컨트롤 동작 제어
- 밝기/명암비 조절 메뉴 만들기
- 6.3 | 감마 보정
- 지수 법칙 변환과 감마 보정
- 감마 보정 구현
- 실숫값을 입력 받는 감마 보정 대화 상자 만들기
- 대화 상자 초기화 및 컨트롤 동작 제어
- 감마 보정 메뉴 만들기
- 6.4 | 히스토그램 분석
- 히스토그램이란?
- 히스토그램 대화 상자 만들기
- 대화 상자에 히스토그램 그리기
- 히스토그램 보기 메뉴 만들기
- 6.5 | 히스토그램 스트레칭과 균등화
- 히스토그램 스트레칭
- 히스토그램 균등화
- 히스토그램 스트레칭과 균등화 메뉴 만들기
- 7장. 영상의 산술 및 논리 연산
- 7.1 | 영상의 산술 연산
- 덧셈 연산
- 뺄셈 연산
- 평균 연산
- 차이 연산
- 7.2 | 영상의 논리 연산
- AND 연산
- OR 연산
- 7.3 | 산술 및 논리 연산 기능 구현
- 도큐먼트 리스트를 받아오는 방법
- 산술 및 논리 연산 대화 상자 만들기
- 대화 상자에 도큐먼트 선택 기능 추가하기
- 산술 및 논리 연산 메뉴 및 메뉴 이벤트 추가
- 7.4 | 비트 평면 분할
- 비트 평면이란?
- 비트 평면 분할 메뉴 및 메뉴 이벤트 처리기 추가
- 모든 창 닫기 기능 추가
- 8장. 다양한 공간적 필터링 기법
- 8.1 | 공간적 필터링
- 공간적 필터링의 기본 개념
- 공간적 필터링의 구현 방법
- 8.2 | 영상 부드럽게 만들기
- 평균 값 필터
- 가중 평균 값 필터
- 가우시안 필터
- 가우시안 필터 대화 상자 만들기
- 영상 부드럽게 만들기 메뉴 만들기
- 8.3 | 영상 날카롭게 만들기
- 언샤프 마스크 필터링
- 라플라시안을 이용한 언샤프 마스크 필터 구현
- 하이부스트 필터
- 영상 날카롭게 만들기 메뉴 만들기
- 8.4 | 잡음 생성
- 가우시안 잡음 생성
- 소금&후추 잡음 생성
- 잡음 추가 대화 상자 만들기
- 잡음 추가 메뉴 만들기
- 8.5 | 잡음 제거를 위한 비선형 필터
- 미디언 필터
- 미디언 필터 메뉴 만들기
- 비등방성 확산 필터
- 비등방성 확산 대화 상자 만들기
- 비등방성 확산 필터 메뉴 만들기
- 9장. 영상의 기하학적 변환
- 9.1 | 영상의 이동 변환
- 이동 변환이란?
- 이동 변환의 구현
- 이동 변환 대화 상자 만들기
- 이동 변환 메뉴 만들기
- 9.2 | 영상의 크기 변환
- 크기 변환과 보간법
- 최근방 이웃 보간법
- 양선형 보간법
- 3차 회선 보간법
- 크기 변환 대화 상자 만들기
- 크기 변환 대화 상자 초기화 및 컨트롤 동작 제어
- 크기 변환 메뉴 만들기
- 9.3 | 영상의 회전 변환
- 회전 변환에 관한 이론적 설명
- 임의의 각도 회전 구현
- 특수 각도에 대한 회전 구현
- 회전 변환 대화 상자 만들기
- 회전 변환 메뉴 만들기
- 9.4 | 영상의 대칭 변환
- 좌우 대칭
- 상하 대칭
- 좌우 대칭과 상하 대칭 메뉴 만들기
- 10장. 주파수 공간에서의 영상 처리
- 10.1 | 주파수 공간의 이해
- 1차원 데이터에 대한 이산 푸리에 변환
- 1차원 데이터에 대한 이산 푸리에 변환의 구현
- 10.2 | 영상의 푸리에 변환
- 2차원 영상의 푸리에 변환
- 2차원 영상의 푸리에 변환 구현
- 개선된 2차원 영상의 푸리에 변환
- DFT와 DFTRC 메뉴 만들기
- 10.3 | 고속 푸리에 변환
- 고속 푸리에 변환의 이론적 배경
- 2차원 영상의 고속 푸리에 변환
- FFT 메뉴 만들기
- 10.4 | 주파수 공간에서의 필터링
- 이상적 저역 및 고역 통과 필터
- 가우시안 저역 및 고역 통과 필터
- 주파수 공간 필터링 대화 상자 만들기
- 주파수 공간 필터링 메뉴 만들기
- 11장. 영상의 특징값 추출 방법
- 11.1 | 마스크를 이용한 엣지 검출
- 엣지와 함수 그래디언트
- 마스크 기반 엣지 검출
- 마스크 기반 엣지 검출기 구현
- 마스크 기반 엣지 검출 메뉴 만들기
- 11.2 | 캐니 엣지 검출기
- 캐니 엣지 검출 방법
- 캐니 엣지 검출기 구현
- 캐니 엣지 검출 대화 상자 만들기
- 캐니 엣지 검출 메뉴 만들기
- 11.3 | 허프 변환을 이용한 직선 검출
- 허프 변환을 이용한 직선 검출 방법
- 룩업 테이블을 이용한 허프 변환의 구현
- 허프 변환 메뉴 만들기
- 11.4 | 해리스 코너 포인트 검출 방법
- 해리스 코너 검출 방법
- 해리스 코너 검출 구현
- 해리스 코너 검출 대화 상자 추가
- 해리스 코너 검출 메뉴 만들기
- 12장. 컬러 영상 처리
- 12.1 | 트루컬러 비트맵 다루기
- IppImage 클래스에서 컬러 픽셀 참조 방법
- 트루컬러 영상의 반전
- 트루컬러 영상을 그레이스케일 영상으로 변환
- 그레이스케일로 변환 메뉴 만들기
- 12.2 | 다양한 색 모델
- 색상 표현 방법
- RGB 색 모델
- HSI 색 모델
- YUV 색 모델
- 12.3 | 색상 평면 나누기와 합치기
- 색상 평면 나누기
- 색상 평면 나누기 메뉴 만들기
- 색상 평면 합치기
- 색상 평면 합치기 대화 상자 만들기
- 색상 평면 합치기 메뉴 만들기
- 12.4 | 컬러 영상 처리
- 컬러 엣지 검출
- 컬러 엣지 검출 메뉴 만들기
- 컬러 영상의 히스토그램 균등화
- 13장. 영상 분할
- 13.1 | 이진화 기법
- 영상의 이진화
- 반복적 방법을 이용한 이진화 임계값 결정 방법
- 미리보기 기능이 있는 이진화 대화 상자 만들기
- 이진화 메뉴 만들기
- 13.2 | 레이블링
- 고전적 레이블링 기법
- 고전적 레이블링 기법 구현
- 레이블링 메뉴 만들기
- 13.3 | 외곽선 추적
- 외곽선 추적 기법
- 외곽선 추적 메뉴 만들기
- 14장. 모폴로지 연산
- 14.1 | 이진 영상의 모폴로지 연산
- 모폴로지를 위한 기본 정의
- 이진 영상의 침식과 팽창
- 이진 영상의 열기와 닫기 연산
- 이진 영상의 모폴로지 메뉴 만들기
- 모폴로지 기법을 응용한 외곽선 검출
- 14.2 | 그레이스케일 영상의 모폴로지 연산
- 그레이스케일 영상의 침식과 팽창 연산
- 그레이스케일 영상의 열기와 닫기 연산
- 그레이스케일 영상의 모폴로지 메뉴 만들기
- 15장. 모양 기술자
- 15.1 | 외곽선 기반의 푸리에 기술자
- 푸리에 기술자
- 푸리에 기술자 대화 상자 만들기
- 푸리에 기술자 메뉴 만들기
- 15.2 | 영역 기반의 불변 모멘트
- 불변 모멘트
- 불변 모멘트 메뉴 만들기
- 15.3 | 저니키 모멘트
- 저니키 모멘트
- 저니키 모멘트의 구현
- 저니키 모멘트 메뉴 만들기
- 15.4 | 템플릿 매칭
- 템플릿 매칭
- 템플릿 매칭 메뉴 만들기
- 16장. 동영상 처리
- 16.1 | AVI 파일 처리하기
- AVI 파일의 구조와 사용법
- IppAvi 클래스 만들기
- 16.2 | AVI 플레이어 만들기
- 새 도큐먼트 템플릿 등록하기
- IppAvi 클래스를 이용한 동영상 재생
- 동영상 재생을 위한 툴바 만들기
- 동영상 재생을 위한 코드 작성
- 16.3 | 움직임 벡터 추정
- 블록 매칭 움직임 추정 방법
- IppFullSearch 클래스 만들기
- 움직임 벡터 메뉴 만들기
- 부록A. JPEG 파일 지원
- A.1 | JPEG 라이브러리 사용
- JPEG 압축 원리
- JPEG 라이브러리 빌드하기
- JPEG 라이브러리 사용하기
- 부록B. OpenCV 사용하기
- B.1 | OpenCV 개요와 설치
- B.2 | OpenCV 영상 표현 방법
- B.3 | ImageTool 프로젝트에서 OpenCV 사용하기
- B.4 | OpenCV 사용 예제