OpenCV를 활용한 컴퓨터 비전 프로그래밍 3/e [기본 영상처리부터 고급 컴퓨터 비전까지]
- 원서명OpenCV 3 Computer Vision Application Programming Cookbook - Third Edition (ISBN 9781786469717)
- 지은이로버트 라가니에(Roberts Laganière)
- 옮긴이이문호
- ISBN : 9788960777811
- 40,000원
- 2017년 05월 31일 펴냄
- 페이퍼백 | 560쪽 | 188*235mm
- 시리즈 : acorn+PACKT
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
요약
개정판의 2.x 버전으로 구현된 모든 예제를 검토해 최신 버전인 3.x로 수정하고 최신 기능과 관련된 내용을 추가했다. 프로그래밍으로 이론을 직접 구현해 결과를 보고 분석해야 하는 분야인 영상처리와 컴퓨터 비전의 주요 알고리즘을 선정해 쉽게 읽을 수 있도록 구성했으며, 영상처리 기초 이론부터 컴퓨터 비전의 특징점 검출, 정합, 투영, 객체 추적까지 고르게 다루므로 관심이 있는 독자에게 도움이 될 것이다.
이 책에서 다루는 내용
■ OpenCV 라이브러리를 이용한 프로그램 설치와 생성
■ 화소 다루기로 영상처리
■ 히스토그램을 이용한 영상 분석
■ 영상을 동질 영역으로 분할한 후 의미 있는 객체 추출
■ 영상 내용을 개선하는 영상 필터 적용
■ 묘사 장면의 다른 시점을 정합하기 위해 영상 기하 활용
■ 서로 다른 영상 관찰로부터 카메라 보정
■ 기계 학습 기술을 이용한 얼굴 검출과 사람 검출
■ 영상으로부터 3D 장면 재구성
이 책의 대상 독자
컴퓨터 비전 애플리케이션을 구축하기 위해 OpenCV 라이브러리의 사용 방법을 배우려는 초보 C++ 프로그래머에게 적합하다. 컴퓨터 비전 프로그래밍의 개념을 알고 싶어하는 전문 소프트웨어 개발자에게도 안성맞춤이다. 학부 수준의 컴퓨터 비전 코스에서 교재로 사용할 수 있으며, 영상처리와 컴퓨터 비전의 대학원생과 연구자에게 최고의 참고서다.
이 책의 구성
1장, ‘영상처리 준비’에서는 OpenCV 라이브러리를 소개하고 영상을 읽고 띄울 수 있는 간 단한 애플리케이션을 구축하는 방법을 보여준다. OpenCV의 기본 데이터 구조체도 소개한다.
2장, ‘화소 다루기’에서는 영상을 읽을 수 있는 방법을 설명한다. 각 화소에 작업을 수행하기 위해 영상을 조회하는 여러 방법을 설명한다.
3장, ‘영상의 컬러 처리’에서는 훨씬 나은 컴퓨터 비전 애플리케이션 구축에 도움이 될 수 있는 여러 가지 객체지향 디자인 패턴을 제시하는 예제로 구성한다. 이 밖에 영상의 컬러 개념도 다룬다.
4장, ‘히스토그램으로 화소 세기’에서는 영상 히스토그램을 계산하는 방법과 영상 수정 에 사용할 수 있는 방법을 보여준다. 영상 분할, 객체 검출, 영상 검색을 해낼 수 있는 히스토그램에 기반을 둔 여러 응용을 제시한다.
5장, ‘형태학 연산으로 영상 변환’에서는 수학적 형태학의 개념을 살펴본다. 여러 연산자를 제시하고, 에지, 코너, 분할 검출에 사용할 수 있는 방법을 알려준다.
6장, ‘영상 필터링’에서는 주파수 분석과 영상 필터링의 원리를 알려준다. 저주파 필터와 고주파 필터를 영상에 어떻게 적용하는지 보여주고, 미분 연산자의 개념을 제시한다.
7장, ‘선, 외곽선, 성분 검출’에서는 기하 영상의 특징 검출에 중점을 둔다. 영상에서 외곽선, 선, 연결 성분 추출 방법을 설명한다.
8장, ‘관심점 검출’에서는 영상에서의 여러 가지 특장점 검출기를 설명한다.
9장, ‘관심점 기술과 정합’에서는 관심점의 기술자를 계산할 수 있는 방법과 영상 간의 점 정합에 사용하는 방법을 설명한다.
10장, ‘영상에서 투영 관계 추정’에서는 동일한 장면의 두 영상 간에 존재하는 투영 관계를 살펴본다. 영상에서 특정 대상을 검출하는 방법도 설명한다.
11장, ‘3D 장면 재구성’에서는 여러 영상으로부터 장면의 3D 요소를 재구성하고 카메라 포즈를 복원할 수 있다. 카메라 보정 과정도 설명한다.
12장, ‘비디오 시퀀스 처리’에서는 비디오 시퀀스를 읽고, 쓰고, 비디오 시퀀스의 프레임을 처리하는 프레임워크를 제공한다. 카메라 전방에서 움직이는 전경 객체를 추출하는 방법도 보여준다.
13장, ‘시각적 움직임 추적’에서는 시각적 추적 문제를 해결한다. 비디오에서 눈에 보이는 움직임을 계산하는 방법을 보여준다. 영상 시퀀스에서 움직이는 객체를 추적하는 방법도 설명한다.
14장, ‘예제로 배우기’에서는 머신러닝의 기본 개념을 소개한다. 영상 표본으로부터 객체 분류기를 어떻게 구축하는지 보여준다.
목차
목차
- 1장. 영상처리 준비
- 소개
- OpenCV 라이브러리 설치
- 영상을 불러오고 띄우고 저장하기
- 2장. 화소 다루기
- 소개
- 화소 값에 접근
- 포인터로 영상 조회
- 영상을 조회하는 효율적인 반복문 작성
- 이웃 접근으로 영상 조회
- 간단한 영상 산술 수행
- 영상 재매핑
- 3장. 영상의 컬러 처리
- 소개
- 전략 디자인 패턴을 이용한 컬러 비교
- 그랩컷 알고리즘으로 영상 분할
- 컬러 표현 변환
- 색상, 채도, 밝기로 컬러 표현
- 4장. 히스토그램으로 화소 세기
- 소개
- 히스토그램 계산
- 영상 모습을 변경하는 룩업 테이블 적용
- 영상 히스토그램 평활화
- 특정 영상 내용을 검출하기 위한 히스토그램 역투영
- 객체를 찾는 평균 이동 알고리즘 사용
- 히스토그램 비교를 이용한 유사 영상 검색
- 적분 영상으로 화소 개수 세기
- 5장. 형태학 연산으로 영상 변환
- 소개
- 형태학 필터를 이용한 영상 침식과 팽창
- 형태학 필터를 이용한 영상 열림과 닫힘
- 그레이레벨 영상에 형태학 연산자 적용
- 워터쉐드를 이용한 영상 분할
- MSER를 이용해 두드러진 영역 추출
- 6장. 영상 필터링
- 소개
- 저주파 통과 필터를 이용한 영상 필터링
- 중간값 필터를 이용한 영상 필터링
- 에지를 검출하는 방향성 필터 적용
- 영상의 라플라시안 계산
- 7장. 선, 외곽선, 성분 추출
- 소개
- 캐니 연산자로 영상 외곽선 검출
- 영상에서 허프 변환으로 선 검출
- 선을 점 집합에 맞추기
- 성분의 외곽선 추출
- 성분의 모양 기술자 계산
- 8장. 관심점 검출
- 소개
- 영상에서 코너 검출
- 특징을 빠르게 검출
- 크기에 불변한 특징 검출
- 다중 크기에서 FAST 특징 검출
- 9장. 관심점 기술과 정합
- 소개
- 지역 템플릿 정합
- 지역 명도 패턴 기술
- 이진 특징으로 특징점 기술
- 10장. 영상에서 투영 관계 추정
- 소개
- 영상 쌍의 기초 행렬 계산
- RANSAC을 이용한 영상 정합
- 두 영상 간의 호모그래피 계산
- cv::Stitcher 모듈로 영상 파노라마 생성
- 영상에서 평면 대상 검출
- 11장. 3D 장면 재구성
- 소개
- 디지털 영상 형성
- 카메라 보정
- 카메라 포즈 복원
- 보정된 카메라로부터 3D 장면 재구성
- 스트레오 영상으로부터 깊이 계산
- 12장. 비디오 시퀀스 처리
- 소개
- 비디오 시퀀스 읽기
- 비디오 프레임 읽기
- 비디오 시퀀스 쓰기
- 비디오에서 전경 객체 추출
- 13장. 시각적 움직임 추적
- 소개
- 비디오에서 특징점 추적
- 옵티컬 플로 추정
- 14장. 예제로 배우기
- 소개
- 비디오에서 특징점 추적
- 하르 특징의 캐스케이드로 객체와 얼굴 찾기
- 서포트 벡터 머신과 방향성 기울기의 히스토그램으로 객체와 사람 검출
도서 오류 신고
정오표
정오표
[p.32 : 2행]
[p.70 : 아래서 9행]
영상의 채널 개수는 nchannels 메소드로
->
영상의 채널 개수는 channels 메소드로
[p.121 : 아래서 10행]
[p.121 : 아래서 6행]
[p.173 : 2행]
image = cv::imread("baboon3.jpg");
->
image = cv::imread("baboon2.jpg");
[p.276 : 7~9행]
[p.294]
... 제공하는 9개의 연결 성분을 얻는다.
->
... 제공하는 6개의 연결 성분을 얻는다.
[p.295: 아래에서 2행]
int cmax = 1000;
->
int cmax = 500;
[p.302 : 5행]
cv::conveityDefects
->
cv::convexityDefects
[p.302 : 9행]
:::Point>
->
::Point>
[p.305 : 3행]
cv::approxPolyDP(it,poly,10,true);
->
cv::approxPolyDP(it,poly,5,true);
[p.322 : 아래에서 9행]
new cv::FastFeatureDetector(40);
->
cv::FastFeatureDetector::create(40);
[p.324 : 6행]
조사하지 하지 않은 채
->
조사하지 않은 채
[p.421 : 아래에서 6행]
dkvdptj
->
(삭제)