Download presentation
Presentation is loading. Please wait.
1
5장 포인트 처리(point processing)
영상처리의 가장 기본적인 처리 기법 영상데이터에 대한 사용자 접근의 시작 영상을 취급하는 디지털 전자기기에서 많이 사용함 픽셀로 이루어진 영상에서 하나하나의 단위픽셀 각각에 독립적으로 작용하는 처리
2
점처리 vs. 영역처리 1.픽셀단위의 산술연산 - 70을 변화시키기 위해 (4,4)의 자신만의 데이터를 사용한 경우
70+30=100 vs. - (4,4)위치 인근의 여러 점들을 사용하는 경우:인접영역에 기반한 커널(kernel) 기반 영상처리
3
상수값에 의한 산술연산 입력 영상 상수 더하기(원영상+60) 상수곱하기(원영상*1.4) 상수 빼기 (원영상-60)
입력 영상 상수 더하기(원영상+60) 상수곱하기(원영상*1.4) 상수 빼기 (원영상-60) - 상수값 더하기와 곱하기의 차이는 대비(contrast)의 차이
4
상수값에 의한 산술연산 영상 값 클램핑(Clipping)
- InImg[x][y], OutImg[x][y] 둘 다는 0~255사이의 값 - C1~C4도 0~255사이의 값을 가져야 함 - 값을 더하거나 조작하여 결과값은 0~255사이의 범위를 벗어나는 경우 방지 필요
5
두 영상 사이의 산술연산(프레임 연산, Frame operation)
6
두 영상 사이의 산술연산 배경(background)영상 입력영상 차분 영상
7
룩업 테이블 연산 룩업 테이블(Lookup Table: LUT) 연산 - 산술연산의 고속수행을 위해 사용
- 점처리 기법에서 가장 효과적으로 사용됨 3비트 LUT 를 이용한 연산
8
룩업 테이블 연산 예) LUT에 의한 고속 연산: 상수 곱에 의한 대비처리의 고속화
for( i=0; i<height; i++) { for( j=0; j<width; j++) { temp = (int)( InImg[i][j]*1.4); // 곱셈연산의 반복적 발생 OutImg[i][j]= temp > 255 ? 255 : temp; // if 연산의 반복 발생 } } // 곱 연산, if연산의 횟수: height*width 번 unsigned char LUT[256]; // LUT로 사용할 메모리를 선언 // LUT값을 계산 for(i=0; i<256; i++) { int temp=(int)( i*1.4 ); LUT[i] = temp > 255 ? 255 : temp; } // LUT를 통하여 영상을 처리 for(i=0; i<height; i++) { for(j=0; j<width; j++) OutImg[i][j]=LUT[ InImg[i][j] ]; } // 곱 연산, if연산 횟수: 256번, 대입연산 width*height 번
9
룩업 테이블 연산 감마(γ) 상관관계에 의한 영상매크로 변환 - CRT 명암조절과 비슷한 비선형 변환
- 영상센서, 출력기 및 필름 등에서 사용함 - 0<γ<1 : 영상을 흐리게 만듬 - 1<γ : 영상을 밝게 만듬 - RGB모니터: 1.4<γ<2.8 Output = Input 1/γ #define GAMMA 2.0 #define transformation(x) pow((double)(x)/255.0,1/GAMMA); for(i=0; i<255; i++) LUT[i] = (unsigned char) transformation(i); for(i=0; i<height*width; i++) outImg[i] = LUT[ inImg[i] ];
10
룩업 테이블 연산
11
룩업 테이블 연산 인간 시각은 똑같은 밝기 변화에 대해 어두운 부분의 변화에 더 민감하게 반응함
인간 시각은 똑같은 밝기 변화에 대해 어두운 부분의 변화에 더 민감하게 반응함 그림 (d)는 어두운 부분에서의 밝기를 더 크게 바꾸어 주었으므로 가시화가 더 좋아지게 느낌
12
룩업 테이블 연산 명암대비변환: 명암이 스트레칭된 영상 명암 대비 압축변환: 명암대비가 압축된 영상
13
룩업 테이블 연산 8 레벨 포스트라이징(posterizing) 변환 3 레벨
14
룩업 테이블 연산 임계값이용 변환: 영상 이진화 임계값의 범위가 주어지는 임계값 변환: 특정범위 내에서만 이진화
임임계값계값 이용 변환: 영상 이진화 범위가 주어지는 임계값 변환: 특정범위 내에서만 이치화 임임계값계값 이용 변환: 영상 이진화 범위가 주어지는 임계값 변환: 특정범위 내에서만 이치화
15
상수값 더하기의 구현 2.픽셀단위의 산술연산 리소스 편집기로 이동하여 리소스 내의 IDR_WINTESTYPE 메뉴를 선택한다. 메뉴가 출력되면 추가할 공백 메뉴부분을 마우스로 두 번 클릭하자. 그림 5-7 <Workspace>에서 <ResourceView> 메뉴 아이템 대화상자에 아래 표와 같이 입력한다.
16
상수값 더하기의 구현 그림 5-9 클래스 마법사(ClassWizard)에서의 입력
<Add Function> 버튼을 클릭해 “OnConstAdd”라는 맴버함수를 추가한다. 추가된 함수를 편집하기 위해 다시 [그림 5-9]의 [Edit Code]버튼을 클릭하면 OnConstAdd( )함수로 이동한다. 이제 코드 입력을 시작하자 그림 5-10 멤버함수의 입력
17
1. 상수값 더하기의 구현 리스트 5-3 상수값 더하기 함수 그림 5-11 상수값 더하기 연산의 실행 예
리스트 5-3 상수값 더하기 함수 그림 5-11 상수값 더하기 연산의 실행 예 코드 입력이 끝났으면 컴파일하고 실행하다. [그림 5-11]은 실행의 예를 보여주고 있다. 입력영상에 상수값 60이 더해져 보다 밝아진 영상이 결과영상으로 출력되고 있다.
18
2. 상수값 빼기의 구현 리소스 편집기로 이동하여 메뉴리소스에 있는 [그림 5-11] 메뉴부의 빈 메뉴부분을 선택한다.
메뉴아이템 대화상자에 아래 표와 같이 입력한다. 그림 5-12 메뉴 편집 void CWinTestView::OnConstSub() { // TODO: Add your command handler code here CWinTestDoc* pDoc = GetDocument(); // 다큐멘트 클래스를 참조하기 위해 ASSERT_VALID(pDoc); // 인스턴스 주소를 가져옴 for(int i=0; i<height; i++) for(int j=0; j<width; j++) int tempVal = pDoc->m_InImg[i][j]-60; tempVal = tempVal < 0 ? 0: tempVal; pDoc->m_OutImg[i][j] = (unsigned char)tempVal; } Invalidate(FALSE); //화면 갱신 <Add Function>버튼을 클릭하여 “OnConstSub”라는 멤버함수를 추가한다. 함수를 추가하고 난후 <Edit Code>버튼을 클릭하면 OnConstSub( )함수로 이동한다. 이제 코드를 입력하자 리스트 5-4 상수값 빼기 함수의 구현
19
상수값 빼기의 구현 코드 입력이 끝났으면 실행한다. 입력영상에 상수값 60을 빼기 때문에 초기의 영상보다 더 어두운 영상이 결과영상으로 나타나게 된다. 그림 5-13 상수값 빼기 연산의 실행 예
20
3. 아이콘 버튼을 이용한 명령 입력 빼기연산을 실행하는 아이콘 버튼을 툴바에 추가해보자. 이 버튼을 클릭함으로써
매뉴를 선택한 경우와 동일하게 상수값 빼기연산이 수행된다. < Workspace>의 <Resource View>텝을 선택하여 리소스 편집기로 이동. <Workspace>의 <Toolbar>부분에서 [+]부분을 클릭한 후, <IDR_MAINFRAME>를 선택 툴바를 추가하기 위해 오른 쪽 편집부의 툴박스를 클릭하여 필요한 그림을 그린다. 동그란 원 하나를 그렸고 내부의 절반은 검은색으로 칠하였다. 색칠한 툴바 부분을 마우스로 클릭하면 다음의 대화창이 뜬다. 툴바를 연결할 서브메뉴의 ID를 상수값 빼기 함수의 ID인 <IDM_CONST_SUB>로 선택 그림 5-14 새로운 툴바의 추가 및 편집 그림 5-15 툴바의 서버메뉴의 ID연결
21
다시 컴파일하고 실행한다. 새롭게 추가된 툴바가 실행창에 나타난다. 영상을 하나 입력하여 읽어 들이고 추가된 툴바를 클릭해보자
다시 컴파일하고 실행한다. 새롭게 추가된 툴바가 실행창에 나타난다. 영상을 하나 입력하여 읽어 들이고 추가된 툴바를 클릭해보자. 입력영상에서 상수값을 빼기연산의 결과가 수행됨을 학인 할 수 있다. 그림 5-16 추가한 툴바에 의한 명령 실행
22
상수값 곱하기 구현 그림 5-17 상수값 곱하기 메뉴의 추가
<Add Function>버튼을 클릭하면 OnConstMu( )함수로 이동한다. 오른 편 리스트 5-5 상수값 곱하기 함수를 코드를 입력한다.
23
4. 상수값 곱하기 구현 코드 입력 후 컴파일하고 실행한다. 입력영상에 상수값 1.4를 곱하기 때문에
초기의 영상보다 전체적으로 더 밝아진 영상이 나타난다. 상수값 곱하기 연산의 실행 그림 5-18 상수값 곱하기 연산의 실행
24
5. 상수값 나누기 구현 상수 나눗셈 연산도 앞의 경우와 유사하게 메뉴와 함수를 만든 후 [리스트 5-6]의 함수를 작성하고 실행하면 된다. 코드 입력 후 컴파일하고 실행하면 입력영상에 상수값 1.4를 나누었기 때문에 초기의 영상보다 전체적으로 더 어두워진 영상이 나타난다. 리스트 5-6 상수값 나누기 연산의 구현 그림 5-19 상수값 나누기 연산의 실행
25
1. 두 프레임의 더하기 영상 구하기 그림 5-20 도큐멘트 클래스에 두 멤버 변수를 추가
도큐멘트 클래스에 이미지를 읽어들일 멤버 함수를 추가
26
두 프레임의 더하기 영상 구하기 TwoImg Load ( )함수에 다음 코드를 입력한다.
리스트 5-7 두개의 서로 다른 두 영상을 읽어 들이는 함수의 구현
27
두 프레임의 더하기 영상 구하기 그림 5-26 두 프레임 더하기 연산의 실행
28
두 프레임의 빼기 영상 구하기 두 프레임 더하기 연산의 실행 리스트 5-9 서로 다른 두 영상의 빼기 연산의 구현
29
두 프레임의 빼기 영상 구하기 그림 5-29 프레임 빼기 연산을 이용한 PCB의 결함 검사
30
3. 두 프레임의 곱 영상 구하기
31
두 프레임의 곱 영상 구하기 리스트 5-10 프레임 곱하기 함수의 구현 그림 5-30 두 프레임의 곱 연산의 실행
32
4. 영상의 고속변환을 위한 룩업테이블 연산구현
33
영상의 고속변환을 위한 룩업테이블 연산구현
34
연습문제 룩업 테이블을 이용하여 영상의 밝기나 색상에 변화를 줄 수가 있다. 이러한 방법을 포스트라이징이라고 한다.
다음은 계단식의 룩업 테이블을 이용하여 여러 레벨의 포스트라이징 변화를 보이는 그림이다.
35
연습문제 주어진 룩업테이블을 참고하여 8레벨의 포스트라이징을 구현하시오.
단, 룩업테이블을 나타내는 그림 (a)의 가로축은 입력 영상의 픽셀 밝기 값, 세로축은 출력 영상의 픽셀밝기 값이다..
36
연습문제 (2) 다음 p5-2(a)의 룩업테이블을 구현하여 0과 255의 두 가지 색상의 영상으로
만드시오. 또 그림 p5-2(b)의 룩업테이블을 구현하여 범위가 있는 이진화 영상으로 만드시오.
37
연습문제
Similar presentations