히스토그램구하기 사전준비 : 히스토그램을저장할메모리가필요함 필요한메모리개수 à 전체영상의픽셀은그값이 0 ~ 255이므로 256 개의메모리필요함 영상을구성하는픽셀의개수는매우크므로메모리형식은 unsigned long으로해야함 ( unsigned 란 +/- 를고려하지않는다는

Similar documents
PowerPoint 프레젠테이션

영상 처리 프로그래밍 By Visual C++

PowerPoint 프레젠테이션

실습용 TOOL 다운 5. MFC 페이지는다음과같으며중간쯤으로이동하면 [MFC Samles General] 항이나오며이중에서 DIBLook 을선택하면다운가능 Folder 에확장자가안보일때 Exlorer 에서 [ 구성 ] 클릭 [ 폴더및검색옵션 ] 클릭 폴더옵션에서 :

<B9CCB5F0BEEE20C1A4BAB8C3B3B8AE2E687770>

Gray level 변환 및 Arithmetic 연산을 사용한 영상 개선

BMP 파일 처리

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

슬라이드 1

untitled

Microsoft PowerPoint - ch07 - 포인터 pm0415

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - D03_SpatialDomainEnhance_note.ppt [호환 모드]

PowerPoint 프레젠테이션

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

PowerPoint 프레젠테이션

Microsoft PowerPoint - 제11장 포인터

특허청구의범위청구항 1 복수의영상검출부로부터출력되는영상의히스토그램 (histogram) 을계산하는단계 ; 상기복수의영상검출부로부터출력되는영상을히스토그램평활화 (histogram equalization) 하는단계 ; 상기복수의영상검출부중하나의영상검출부를선택하는단계 ; 및

, ( ),, ( ), 3, int kor[5]; int eng[5]; int Microsoft Windows 4 (ANSI C2 ) int kor[5] 20 # define #define SIZE 20 int a[10]; char c[10]; float

11장 포인터

歯Lecture2.PDF

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - chap03-변수와데이터형.pptx

설계란 무엇인가?

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

PowerPoint 프레젠테이션

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

Microsoft PowerPoint - chap06-2pointer.ppt

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

chap 5: Trees

Microsoft PowerPoint - chap-11.pptx

(......).hwp

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

PowerPoint 프레젠테이션

슬라이드 1

PowerPoint 프레젠테이션

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

Visual Studio online Limited preview 간략하게살펴보기

C 프로그래밊 개요

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - chap10-함수의활용.pptx

Lab 3. 실습문제 (Single linked list)_해답.hwp

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

K&R2 Reference Manual 번역본

11장 포인터

Data Structure

4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열

C 프로그래밊 개요

슬라이드 1

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

PowerPoint 프레젠테이션

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

Frama-C/JESSIS 사용법 소개


API 매뉴얼

이미지 워핑과 모핑

: 1 int arr[9]; int n, i; printf(" : "); scanf("%d", &n); : : for(i=1; i<10; i++) arr[i-1] = n * i; for(i=0; i<9; i++) if(i%2 == 1) print

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

C 언어 프로그래밊 과제 풀이

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

Microsoft Word - ExecutionStack

untitled

실험 5

Microsoft PowerPoint - chap06-1Array.ppt

The C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수

API 매뉴얼

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

윤성우의 열혈 TCP/IP 소켓 프로그래밍

인접차량인식 PGM FOR ADAS

Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee

Microsoft PowerPoint - 06-Pointer and Memory.pptx

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

졸업논문 되어자전거의현재정보를알려주게된다 시스템의동작절차그림 3-1 리더에서의자전거정보조회동작절차위에동작절차에서알수있듯이리더에서하는동작절차에서는크게 부분으로나눌수있다 리더에서에너지를보내 로부터데이터가전송되면자전거의정보를확인한다 여기서도난당한자전거인

슬라이드 1

untitled

02 C h a p t e r Java

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

Let G = (V, E) be a connected, undirected graph with a real-valued weight function w defined on E. Let A be a set of E, possibly empty, that is includ

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

13주-14주proc.PDF

Microsoft PowerPoint - Java7.pptx

중간고사

adfasdfasfdasfasfadf

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<B8D6C6BCB9CCB5F0BEEEBDC3BDBAC5DB28BFB5BBF3C3B3B8AE292DBFE4BEE0C1A4B8AE3128B9DAB1E2C8AB292E687770>

목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2

Infinity(∞) Strategy

ATmega128

Transcription:

디지털영상처리 실습 : 히스토그램 방송영상미디어과 히스토그램 (Histogram) 히스토그램이란? n 디지털영상을구성하는화소는명도값을나타내는데어떤명도값을가진픽셀수가몇개있는가를나타내는함수 n 화소의명도값은 0~255 인데각명도값에해당하는화소의수를나타내는함수 히스토그램구하는방법 4 4 3 3 픽셀갯수 6 5 <Histogram> 4 4 3 3 4 1 2 3 2 2 0 1 2 3 1 <Image> 0 1 2 3 4 5 6 명도 1

히스토그램구하기 사전준비 : 히스토그램을저장할메모리가필요함 필요한메모리개수 à 전체영상의픽셀은그값이 0 ~ 255이므로 256 개의메모리필요함 영상을구성하는픽셀의개수는매우크므로메모리형식은 unsigned long으로해야함 ( unsigned 란 +/- 를고려하지않는다는의미 ) 형식 표현가능범위 unsigned char 0 ~ 255 unsigned int 0 ~ 65,535 unsigned long 0 ~ 4,294,967,295 히스토그램을저장하는메모리를마련함 unsigned long Histo[256]; memset(histo, 0, sizeof(unsigned long) * 256); 256 개의메모리를선언함 256 개의메모리를 0 으로청소함 대상메모리명 메모리에채울수 unsigned long 한개가차지하는바이트수 x 메모리수 히스토그램구하기 영상픽셀값과히스토그램의관계 픽셀값 : 171 픽셀값 : 169 메모리내용 1 증가 (+1) 메모리내용 1 증가 (+1) à 메모리는 0 부터시작하므로결국해당픽셀의수를카운트... Histo[167] Histo[168] Histo[169] Histo[170] Histo[171] Histo[172] Histo[173] Histo[174]... 2

히스토그램구하기 void CDibView::OnHistogram() { // TODO: Add your command handler code here CDibDoc* Doc = GetDocument(); HDIB hdib = Doc->GetHDIB(); if (hdib == NULL){ MessageBox("Fail to oen the Image", NULL, MB_OK); return; LPSTR ldibhdr = (LPSTR) ::GlobalLock((HGLOBAL) hdib); int cxdib = (DWORD) ::DIBWidth(lDIBHdr); int cydib = (DWORD) ::DIBHeight(lDIBHdr); int rwidth = ((int)cxdib + 3)/4*4; LPSTR ldibbits = ::FindDIBBits(lDIBHdr); int i, j; unsigned long Histo[256]; memset(histo, 0, 256*sizeof(unsigned long)); for(j=0; j<cydib; j++){ for(i=0; i<cxdib; i++){ int idx; idx = ((int)*(ldibbits + rwidth*j + i)) & 0x00ff; Histo[idx]++; 실제영상의히스토그램을구하기위해서는영상의모든픽셀을읽어야한다. 2 중 FOR 문을사용하여영상의가로, 세로를통해모든데이터를읽어낸다. 실제영상에서의히스토그램은명암이 256 레벨이므로배열도 256 개마련. memset() 으로메모리를 0 으로모두청소 idx 에영상의명도값을입력시킨후 idx 에해당하는배열값을 1 증가시킨다. Invalidate(TRUE); 히스토그램구하기 : 실습 (1) 메뉴항목추가 (3) 마우스우클릭 (5) CDibView 선택 (4) Add Event Handler 선택 (2) ID 변경 (6) Add and Edit 클릭 3

히스토그램구하기 : 실습 히스토그램을그래프로나타내려면복잡하고난이도높은작업필요메모리에올바른히스토그램데이터가채워졌는지알아보는방법으로대체 à 디버거 (Debugger) 사용에의한메모리검사방법 (2) Debug à Start Debuggin 클릭 (3) 프로그램이실행되며비트맵영상을열면됨 (1) Sto oint를설정 à 프로그램영역좌측에커서가형태로바뀌면클릭함 히스토그램구하기 : 실습 (1) 히스토그램을클릭 (2) Visual Studio 로돌아옴 (3) Sto Point 에서멈춤 à 노란색 가정지점을알려줌 (4) Locals 탭을선택하면메모리를볼수있음 à Histo 의앞 + 클릭 4

히스토그램구하기 : 실습 우측스크롤바를아래로내리면더많은히스토그램을볼수있음 기본명암대비스트레칭 히스토그램의최소값 MIN 과최대값 MAX 를구하는알고리즘으로표현하면다음과같음 BYTE MIN=255, MAX=0; int i, j; for(j=0; j<cydib; j++){ for(i=0; i<cxdib; i++){ BYTE tm; tm = *(ldibbits + i + j*rwidth); if(tm <= MIN) MIN = tm; for(j=0; j<cydib; j++){ for(i=0; i<cxdib; i++){ BYTE tm; tm = *(ldibbits + i + j*rwidth); if(tm >= MAX) MAX = tm; ( 다음페이지에이어짐 ) 5

기본명암대비스트레칭 MIN, MAX 값을이용한 Contrast Stretching 알고리즘은다음과같음 for(j=0; j<cydib; j++){ for(i=0; i<cxdib; i++){ int TMP; TMP = (int)((*(ldibbits + i + j*rwidth)&0x00ff); TMP = (TMP MIN)*255 / (MAX-MIN); //stretching if(tmp < 0) TMP = 0; // 계산값이초과되면제한 if(tmp > 255) TMP = 255; // 계산값이초과되면제한 *(ldibbits + i + j*rwidth) = (BYTE) TMP; 기본명암대비스트레칭 : 실습 (1) 점처리 항에 스트레칭 추가 (2) ID 항목에 ID_STRETCH 추가 (4) CDibView 선택 (3) 스트레칭 우클릭 à Add Event Handler 선택 (5) Add and Edit 선택 6

기본명암대비스트레칭 : 실습 새롭게추가된부분 기본명암대비스트레칭 : 실습 명암대비스트레칭결과 7

기본명암대비스트레칭 : 엔드 - 인 엔드-인 (end-in) 탐색기법의도입 : 모든범위의명도값을가짐에도불구하고화소의대부분이특정값에몰려있는경우 à 최저와최고명도값주의에는히스토그램이거의없음이경우화질을향상시키는방법이엔드-인탐색기법임 기본명암대비스트레칭 : 엔드 - 인 for(j=0; j<cydib; j++){ for(i=0; i<cxdib; i++){ int TMP; TMP = (int)((*(ldibbits + i + j*rwidth)&0x00ff); TMP = (TMP MIN)*255 / (MAX-MIN); //stretching 엔드 - 인기법도입한알고리즘 if(tmp < 0) TMP = 0; // 계산값이초과되면제한 if(tmp > 255) TMP = 255; // 계산값이초과되면제한 *(ldibbits + i + j*rwidth) = (BYTE) TMP; for(j=0; j<cydib; j++){ for(i=0; i<cxdib; i++){ int TMP, min, max; min = (int)min; max = (int)max; TMP = (int)((*(ldibbits + i + j*rwidth)&0x00ff); if(tmp <= min) TMP = 0; els if(tmp >= max) TMP = 255; else TMP = (TMP min)*255 / (max - min); //stretching if(tmp < 0) TMP = 0; // 계산값이초과되면제한 if(tmp > 255) TMP = 255; // 계산값이초과되면제한 *(ldibbits + i + j*rwidth) = (BYTE) TMP; 8

히스토그램평활화의 3 단계 1 단계 : 영상의히스토그램 Histo[j] 를구함 2 단계 : 각명도에대해서그때까지의히스토그램의합즉누적히스토그램을구함 3 단계 : 누적히스토그램을정규화함 n[i] : 정규화된히스토그램 N : 영상의총픽셀수 Imax: 영상의최고명도값 히스토그램평활화를적용한영상 콘트라스트가나쁜영상 히스토그램균일화된영상 < 좁은명도분포 > < 확대개선된명도분포 > 9

히스토그램평활화를적용한영상 히스토그램평활화 : 실습 1) Histogram 을구한다 : for(j=0;j<cydib;j++){ for(i=0;i<cxdib;i++){ int idx = *(ldibbits + rwidth*j + i] & 0x00ff; Histo[idx]++; 2) ScaleFactor 를구한다 : TotalPixel = (long)cydib * (long)cxdib; ScaleFactor = 255./TotalPixel; 3) 누적 Histogram 을구한후 ScaleFactor 로곱하여균일화한다 : for(i=0;i<256;i++){ Sum += Histogram[i]; Sum_Hist[i] = (Sum * ScaleFactor) +0.5; if(sum_hist[i] >=255) Sum_Hist[i] = 255; else if(sum_hist[i]<=0) Sum_Hist[i] = 0; 4) 균일화된값으로새영상을만든다 : for(j=0;j<cydib;j++){ for(i=0;i<cxdib;i++){ int tm = *(ldibbits + rwidth*j + i) &0x00ff; *(ldibbits + rwidth*j + i) = (BYTE)(Sum_Hist[tm]); 10

히스토그램평활화 : 실습 (1) (2) (4) (3) (5) 히스토그램평활화 : 실습 히스토그램구하는부분에서추가된부분 11

히스토그램평활화 : 결과 12