해당 포스트는 "열혈강의 영상처리 프로그래밍" 책의 내용을 요약한 것이다.
※ 영상의 기하학적 변환
영상의 기하학적 변환은 픽셀의 위치를 이동하여 공간적 변환을 만드는 것으로 평행 이동, 회전, 크기 변화 등이 있다.
※ 픽셀 값의 보간 방법
imgaeOut.GetAt(x,y) = imageIn(srcX, srcY);
기하학적 변환은 입력 영상의 픽셀을 다른 위치로 옮기는 것이다. 위 코드는 입력 영상의 srcX, srcY 위치 픽셀을 x,y위치에 옮긴다는 뜻이다. 이렇게 픽셀을 옮길 때 GetAt 함수의 인수는 int 형으로 되어 있어서 소수 단위의 위치가 무시되어 정확한 위치 변환이 이루어지지 않는다. 그래서 소수 단위의 이동을 처리하는 방법을 구현해야 하는데 이를 픽셀 값의 보간이라고 한다. 픽셀 값의 보간 방법으로 최단 입점 보간, 쌍선형 보간, 입방 회선 보간, 쌍입방 보간이 있다. 각 방법들 가운데 오른쪽 방법일수록 수행시간이 느리고 대신에 더욱 정교한 보간 결과를 얻을 수 있다.
※ 최단 입점 보간
가장 가까운 원본 픽셀을 선택하는 방법이다. 아래의 그림과 같이 p와 q는 0에서 1사이의 소수인데 단순히 x+p와 y+q를 정수로 반올림하여 해당 위치의 픽셀 값을 가져오는 방법이다.
BYTE NearestNeighbor(double x, double y) { int px = IN_IMG((int)(x+0.5), 0, m_nWidth); int py = IN_IMG((int)(y+0.5), 0, m_nheight); return m_pIn[py*m_nWStep + px]; } #define IN_IMG(x, lo, hi) (x < lo)? lo : x > hi ? hi : x
위 코드가 최단 입점 보간 함수의 구현이다. 단순히 (x+p, y+q)을 반올림해서 정수값을 반환한다. 아래의 매크로 함수는 px 값과 py 값이 입력영상의 범위 내에서 벗어나지 않도록 하는 메서드 이다. 이 최단 입점 보간은 단순히 반올림만 하기 때문에 정확한 변환이 이루어지지 않는다. 만약 x를 0.3픽셀 만큼 왼쪽으로 이동하고 싶다면 최단 입점 보간 함수에 의해서 반올림해 x-0.3이 x가 되서 변환결과가 입력 영상과 똑같아 진다.
'영상처리 프로그래밍' 카테고리의 다른 글
픽셀 값의 보간 방법(3) - 입방 회선 보간 (0) | 2017.06.12 |
---|---|
픽셀 값의 보간 방법(2) - 쌍선형 보간 (0) | 2017.06.12 |
영상의 광학적 변환(4) - 히스토그램 (0) | 2017.06.11 |
영상의 광학적 변환(3) - 영상 잡음 감소 (0) | 2017.06.10 |
영상의 광학적 변환(2) - 영상 감마 보정 (0) | 2017.06.10 |
Git 원리(2) - commit
git commit를 할 경우 커밋에 관련된 정보가 object 파일로 저장된다. 위 사진에서 커밋 관련 정보로 커밋 메싲, 작성한 사람 이름/이메일, tree "오브젝트 링크"가 있다. (위의 커밋은 초기 버전이여서 parent가 없다)
- tree는 해당 버전에 관련된 파일 정보들을 가지는 파일이다. 옆에 "오브젝트 링크"를 누르면 위 사진과 같이 해당 버전에 f1.txt, f2.txt, f3.txt가 있는 것을 알 수 있고 각각의 파일에 대한 객체 파일 위치가 나온다.
위 사진은 커밋 메시지를 "2"로 해서 추가적인 커밋을 했을 경우 git 내부 정보다. 위 사진을 보면 첫 번째 사진과 달리 parent "오브젝트 링크" 정보가 잇다. 해당 오브젝트 링크는 이전 커밋 오브젝트 파일과 연결되어 있다. 사진에서 밑에 있는 parent에 대한 트리를 보면 첫번 째 사진과 같이 나오고 첫 번째 버전에서의 파일 내용을 볼 수 있다.
=> 커밋에서 tree와 parent가 있고 각각의 버전은 버전이 만들어진 시점을 스냅샷해 트리라는 정보 구조안에 저장함으로써 과거 버전의 파일을 참조할 수 있게 된다.
프로젝트 안에 d1 디렉토리를 만들고 f1.txt를 생성 후 커밋했을 경우가 위와 밑에 사진에 나와있다.
해당 커밋의 트리를 보았을 때 d1이 "blob"가 아닌 "tree"로 되어 있다. 해당 트리 옆 오브젝트 링크를 클릭하면 "blob"로 된 f1.txt가 나온다.
=> 오브젝트 파일은 "blob"로 된 파일 내용, "tee"로 된 버전에 관련된 파일들에 대한 정보나 디렉토리, 커밋으로 구성되어 있다.
'Git(생활코딩)' 카테고리의 다른 글
Git 혁신(2) - branch 정보 확인 (0) | 2017.06.13 |
---|---|
Git 혁신(1) - branch (0) | 2017.06.12 |
Git 원리(1) - git add (0) | 2017.06.09 |
Git 기본(4) - 변경사항, 과거 돌아가기 (0) | 2017.06.05 |
Git 기본(3) - add (0) | 2017.06.04 |