chap.2 point processes

27
Practical Image Processing 1 Chap.2 Point processes Inverting : f(x,y) <- 255-f(x,y) Inverting : f(x,y) <- 255-f(x,y) arithmetic operations arithmetic operations adding, subtracting, dividing, and multiplexing pixels by constant When values become greater than 255, they are set to 255 f(x,y) <- f(x,y) + 10 f(x,y) <- min(255, max(f(x,y), 0)) fig. 2.1, 2,2

Upload: pippa

Post on 05-Jan-2016

56 views

Category:

Documents


0 download

DESCRIPTION

Chap.2 Point processes. Inverting : f(x,y)

TRANSCRIPT

Page 1: Chap.2  Point processes

Practical Image Processing 1

Chap.2 Point processes

Inverting : f(x,y) <- 255-f(x,y)Inverting : f(x,y) <- 255-f(x,y) arithmetic operationsarithmetic operations

adding, subtracting, dividing, and multiplexing pixels by constant

When values become greater than 255, they are set to 255

f(x,y) <- f(x,y) + 10 f(x,y) <- min(255, max(f(x,y), 0))

fig. 2.1, 2,2

Page 2: Chap.2  Point processes

Practical Image Processing 2

Histogram view intensity profile of an image give information on contrast & overall intensity distr

ibution of image used to determine range of pixels for objects or bac

kground : thresholding

Page 3: Chap.2  Point processes

Practical Image Processing 3

f(x,y) <- f(x,y)+50f(x,y) <- f(x,y)+50

f(x,y) <- 255-f(x,y)f(x,y) <- 255-f(x,y)

Invert, Addition ?Invert, Addition ?

Page 4: Chap.2  Point processes

Practical Image Processing 4

XOR operation

bit operationbit operation generate binary image where value of 0 generate binary image where value of 0

is assigned to pixels whose value were is assigned to pixels whose value were the same as some constant maskthe same as some constant mask gray value of a pixel x = 1011, mask y = 0101 x XOR y = 1110, (x XOR y) XOR y = 1011 y XOR y = 0000

often used to generate cursoroften used to generate cursor

Page 5: Chap.2  Point processes

Practical Image Processing 5

Look-up Table 점 처리는 명암값을 다른 명암값으로 변경하는 것임점 처리는 명암값을 다른 명암값으로 변경하는 것임

Look-up Table(1Look-up Table(1 차원 배열차원 배열 )) 을 사용해서 빠르게 수행을 사용해서 빠르게 수행 입력 입력 : : 픽셀의 명암값 픽셀의 명암값 배열의 인덱스가 됨 배열의 인덱스가 됨 출력 출력 : : 그 픽셀의 변환된 명암값 그 픽셀의 변환된 명암값 배열의 값 배열의 값 각 픽셀에 대해 처리하기 전에 미리 각 픽셀에 대해 처리하기 전에 미리 LUT LUT 만듦만듦 각 픽셀은 단지 한번의 메모리 참조만 필요 각 픽셀은 단지 한번의 메모리 참조만 필요 매우 빠름 매우 빠름

Page 6: Chap.2  Point processes

Practical Image Processing 6

Histogram equalization( 히스토그램 평활화 ) 자동으로 영상의 밝기 조정 자동으로 영상의 밝기 조정 (( 비교 비교 : : 히스트그램 히스트그램

스트레칭스트레칭 )) 히스토그램을 좁히거나 넓혀 가능하면 모든 명암값에 히스토그램을 좁히거나 넓혀 가능하면 모든 명암값에

대해 균일한 히스토그램을 얻고자 함대해 균일한 히스토그램을 얻고자 함 방법방법

1) 히스토그램을 계산 (compute histogram)2) 히스토그램의 “정규화된 합계”를 구함 (calculate normalized su

m of histogram)3) “ 정규화된 합계” 를 Look up table 로 사용해서 각 픽셀의

명암값 변환 (transform input image to output image) 영상이 어두워서 구별이 잘 안되던 부분이 향상됨영상이 어두워서 구별이 잘 안되던 부분이 향상됨 포토샵 포토샵 : : 이미지이미지 >> 조정조정 >> 자동레벨자동레벨

Page 7: Chap.2  Point processes

Practical Image Processing 7

Page 8: Chap.2  Point processes

Practical Image Processing 8

Page 9: Chap.2  Point processes

Practical Image Processing 9

Image :Image :4 4 3 34 4 3 34 4 3 34 4 3 34 1 2 34 1 2 30 1 2 30 1 2 3

Max_level =Max_level = 77# pixels =# pixels = 1616

Normalized sum(Normalized sum( 정규화된 합계정규화된 합계 ):):

sum * max_level / # pixelssum * max_level / # pixels

Ex) for level=2,Ex) for level=2,

ns = 5 * 7 / 16 = 2.18ns = 5 * 7 / 16 = 2.18

Page 10: Chap.2  Point processes

Practical Image Processing 10

히스토그램 평활화 : 프로그램 ( 교과서 64쪽 )

float scale_factor = (float)255.0/(m_nHeight * m_nWidth);float scale_factor = (float)255.0/(m_nHeight * m_nWidth);for(int i=0 ; i<256 ; i++) hist[i] = 0;for(int i=0 ; i<256 ; i++) hist[i] = 0;

// // 전체의 픽셀의 값으로 찾아가서 그 수가 나오면 전체의 픽셀의 값으로 찾아가서 그 수가 나오면 11 씩 증가씩 증가for(int j=1;j<m_nHeight;j++)for(int j=1;j<m_nHeight;j++) for(i=1;i<m_nWidth; i++) // for(i=1;i<m_nWidth; i++) // 배열 배열 hist[]hist[] 에에 hist[image_in[j][i]] += 1; // hist[image_in[j][i]] += 1; // 히스토그램이 저장됨히스토그램이 저장됨

//// 정규화된 합계정규화된 합계 (normalized sum of histogram) (normalized sum of histogram) 을 구함을 구함for(i=0; i<256;i++) {for(i=0; i<256;i++) {

sum += hist[i];sum += hist[i];sum_hist[i] = unsigned int((sum * scale_factor) + 0.sum_hist[i] = unsigned int((sum * scale_factor) + 0.

5);5);}}//// 정규화된 합계를 정규화된 합계를 LUTLUT 로 해서 영상을 변환함로 해서 영상을 변환함 ..for(j=0;j<m_nHeight-1;j++)for(j=0;j<m_nHeight-1;j++) for(i=0;i<m_nWidth-1; i++)for(i=0;i<m_nWidth-1; i++)

image_out[j][i] = sum_hist[image_in[j][i]];image_out[j][i] = sum_hist[image_in[j][i]];

Page 11: Chap.2  Point processes

Practical Image Processing 11

Histogram specification( 히스토그램 명세화 ) 히스트그램 평활화 히스트그램 평활화 : : 처리된 영상의 히스트그램이 처리된 영상의 히스트그램이

가능한 균일한 분포를 가지도록 가능한 균일한 분포를 가지도록 결과 결과 히스트그램 히스트그램 : : 균일한 값 균일한 값 (uniform distribution) : (uniform distribution) : 고정된 값고정된 값 . . 사용자가 정해 줄 필요 없음사용자가 정해 줄 필요 없음

히스토그램 명세화 히스토그램 명세화 : : 명암값의 특정부분명암값의 특정부분 (( 어두운 어두운 부분부분 , , 혹은 밝은 부분혹은 밝은 부분 )) 을 더 밝게 혹은 어둡게 을 더 밝게 혹은 어둡게 하고자 함 하고자 함 결과 히스트그램을 사용자가 제공결과 히스트그램을 사용자가 제공

기술적으로는 히스트그램 평활화와 역 평활화의 두 기술적으로는 히스트그램 평활화와 역 평활화의 두 단계를 거침 단계를 거침 : : 그렇지만 그렇지만 Look up table Look up table 처리가 처리가 됨됨

histogram equalization + inverse histogram eqhistogram equalization + inverse histogram equalizationualization

Page 12: Chap.2  Point processes

Practical Image Processing 12

평활화 : 앞에서 설명

역평활화 : 다음 슬라이드

Page 13: Chap.2  Point processes

Practical Image Processing 13

원하는 히스토그램의 normalized sum 역변환표 (inverse Lo

ok Up Table) 2 와 가장 가까운 값의 index

Inverse Histogram Equalization

Page 14: Chap.2  Point processes

Practical Image Processing 14

히스토그램 명세화 : 프로그램 ( 교과서 68 쪽 참조 )/* clear histogram to 0 *//* clear histogram to 0 */for (i=0; i<256; i++) histogram[i]=0;for (i=0; i<256; i++) histogram[i]=0;/* calculate histogram *//* calculate histogram */for (i=0; i<number_of_pixels; i++) histogram[buffer[i]]++;for (i=0; i<number_of_pixels; i++) histogram[buffer[i]]++;/* calculate normalized sum of hist *//* calculate normalized sum of hist */sum=0.0; scale_factor=255.0/number_of_pixels;sum=0.0; scale_factor=255.0/number_of_pixels;for (i=0; I<256; i++) {for (i=0; I<256; i++) { sum += histogram[i];sum += histogram[i]; sum_hist[i] = sum * scale_factor;sum_hist[i] = sum * scale_factor;}}/* transform image using new sum_hist as a LUT *//* transform image using new sum_hist as a LUT */for (i=0; i< number_of_pixels; i++) buffer[i]=(unsigned char) sum_hist[buffer[i]];for (i=0; i< number_of_pixels; i++) buffer[i]=(unsigned char) sum_hist[buffer[i]];/* calculate normalized sum of hist for desired histogram *//* calculate normalized sum of hist for desired histogram */sum=0.0; scale_factor = 255.0 / number_of_pixels;sum=0.0; scale_factor = 255.0 / number_of_pixels;for (i=0; i<256; i++) {for (i=0; i<256; i++) { sum += desired_histogram[i];sum += desired_histogram[i]; sum_hist[i] = sum * scale_factor; }sum_hist[i] = sum * scale_factor; }/* generate the inversed transform *//* generate the inversed transform */for (i=0; i< 256; i++) {for (i=0; i< 256; i++) { difference = fabs(i-sum_hist[0]); min = 0;difference = fabs(i-sum_hist[0]); min = 0; for (j=0; i<256; j++) {for (j=0; i<256; j++) { if (fabs(i-sum_hist[j]) < differnece { difference = fabs(i-sum_hist[j]); min = j; }if (fabs(i-sum_hist[j]) < differnece { difference = fabs(i-sum_hist[j]); min = j; } inv_hist[i] = (unsigend_char) min;inv_hist[i] = (unsigend_char) min;}}/* transform final image using inv_hist *//* transform final image using inv_hist */for (i=0; i < number_of_pixels; i++) buffer[i] = inv_hist[buffer[i]];for (i=0; i < number_of_pixels; i++) buffer[i] = inv_hist[buffer[i]];

void histogram_specificationvoid histogram_specificationbuffer : input image (1D) buffer : input image (1D)

number_of_pixels : number_of_pixels :

desired_histogram : 1Ddesired_histogram : 1D

평활화

역평활화

Page 15: Chap.2  Point processes

Practical Image Processing 15

콘트라스트 스트레칭 (Contrast stretching)( 히스토그램 스트레칭 , 히스토그램 확장 )

High ContrastHigh ContrastLow ContrastLow Contrast

Page 16: Chap.2  Point processes

Practical Image Processing 16

입력영상 입력영상 : :

Low=50, high=200Low=50, high=200

출력영상 출력영상 : :

Low=0, high=255Low=0, high=255

히스토그램을 히스토그램을 선형적선형적 (linear)(linear)으로 변환으로 변환

Page 17: Chap.2  Point processes

Practical Image Processing 17

콘트라스트 스트레칭 (Contrast stretching)

입력영상 범위 : (fmin, famx)

출력영상 범위 : (gmin, gamx)

입력영상의 명암값 f 출력 영상의 명암값 g 일반적인 경우일반적인 경우

출력영상 범위가 출력영상 범위가 (0, 255)(0, 255) 인 경우인 경우

입력영상 범위 설정 방법

1) 사용자 지정 2) 입력 영상에서 최대 , 최소값 구함 (basic method)

3) 입력 영상의 최대 , 최소값에서 각각 p% 버림 (p-tile method (ends-in

search))

Page 18: Chap.2  Point processes

Practical Image Processing 18

히스토그램 확장 : basic method ( 교과서 72 쪽 참조 )/* compute historgram *//* compute historgram */// histogram[0..255]// histogram[0..255] 에 저장에 저장

/*/* 히스토그램에서 최대히스토그램에서 최대 (high), (high), 최소최소 (low) (low) 구함 구함 */*/for (i=255; i>=0; i--) for (i=255; i>=0; i--) if (histogram[i]) { high = i; break; }if (histogram[i]) { high = i; break; }for (i=0; i<255; i++) for (i=0; i<255; i++) if (histogram[i]) { low = i; break; }if (histogram[i]) { low = i; break; }

/* LUT /* LUT 만듦 만듦 */*/for (i=0; i<low; i++) LUT[i] = 0;for (i=0; i<low; i++) LUT[i] = 0;for (i=255; i>high; i--) LUT[i]=0;for (i=255; i>high; i--) LUT[i]=0;scale = 255.0 / (high-low);scale = 255.0 / (high-low);for (i=low; i<=high; i++)for (i=low; i<=high; i++) LUT[i] = (unsigned char) ((i-low)*scale + 0.5);LUT[i] = (unsigned char) ((i-low)*scale + 0.5);

/* LUT/* LUT 를 이용하여 점처리를 이용하여 점처리 . . 입력 영상에 엎어씀 입력 영상에 엎어씀 */*/for (i=0; i < number_of_pixels; i++) for (i=0; i < number_of_pixels; i++) source[i] = LUT[source[i]];source[i] = LUT[source[i]];

void auto_histogram_stretchvoid auto_histogram_stretchsource : input image (1D)source : input image (1D)

Page 19: Chap.2  Point processes

Practical Image Processing 19

히스토그램 확장 : p-tile method ( 교과서 74 쪽 참조 )

/* compute historgram *//* compute historgram */// hist[0..255]// hist[0..255] 에 저장에 저장/*/* 입력 입력 low, highlow, high 에서 최대에서 최대 , , 최소 명암값 최소 명암값 (highthres, lowthres) (highthres, lowthres) 구함 구함 */*/sum = 0;sum = 0;for (i=0; i<255; i++) {for (i=0; i<255; i++) { sum += hist[i]; sum += hist[i]; if (sum * 100 / n_pixels >= low) { lowthres = i; break; }if (sum * 100 / n_pixels >= low) { lowthres = i; break; }}}sum = 0;sum = 0;for (i=255; i<=0; i--) {for (i=255; i<=0; i--) { sum += hist[i]; sum += hist[i]; if (sum * 100 / n_pixels <= high) { highthres = i; break; }if (sum * 100 / n_pixels <= high) { highthres = i; break; }}}/* LUT 만듦 */for (i=0; i<lowthres; i++) LUT[i] = 0;for (i=255; i>highthres; i--) LUT[i]=0;scale = 255.0 / (highthres-lowthres);for (i=lowthres; i<=highthres; i++) LUT[i] = (unsigned char) ((i-lowthres)*scale + 0.5);/* LUT 를 이용하여 점처리 . 입력 영상에 엎어씀 */for (i=0; i < number_of_pixels; i++) source[i] = LUT[source[i]];

void auto_histogram_stretchvoid auto_histogram_stretchsource : input image (1D)source : input image (1D)

low : low : 명암값 작은 쪽 명암값 작은 쪽 low%low% 는 는 00으로으로

high : high : 명암값 큰쪽 명암값 큰쪽 high%high% 는 는 00 으로으로

Page 20: Chap.2  Point processes

Practical Image Processing 20

명암변환 (Histogram transformation)

입력 영상의 명암값 입력 영상의 명암값 출력 영상의 출력 영상의 명암값으로 변환 명암값으로 변환 : : 변환 함수를 미리 지정함변환 함수를 미리 지정함

변환함수가 바로 변환함수가 바로 LUT LUT 가 됨 가 됨 : : 프로그램 프로그램 간단간단

변환 함수에 따라 다양한 효과 변환 함수에 따라 다양한 효과 (( 포토샵에서 포토샵에서 IImage>Adjust>Curves mage>Adjust>Curves 참조참조 ))

null transform : g = fnull transform : g = f negative transform : g = 255-f (fig. 2.15)negative transform : g = 255-f (fig. 2.15)

Page 21: Chap.2  Point processes

Practical Image Processing 21

Page 22: Chap.2  Point processes

Practical Image Processing 22

Gamma correction : 센서 , 디스플레이 , 필름등의 비선형 특성 보상

Sample inputSample input

Gamma correctedGamma correctedinputinput Monitor outputMonitor output

Gamma CorrectionGamma Correction

Monitor outputMonitor output

Page 23: Chap.2  Point processes

Practical Image Processing 23

Gamma Correction: 프로그램

/* LUT 만듦 */

for (i=0; i<256; i++)

LUT[i] = (unsigned char)

(pow(i/255.0, gamma)*255.0 + 0.5);

/* LUT 를 이용하여 점처리 . 입력 영상에 엎어씀 */

for (i=0; i < number_of_pixels; i++)

source[i] = LUT[source[i]];

void gamman_correctionvoid gamman_correctionsource : input image (1D)source : input image (1D)gamma : gamma : 감마 값 감마 값 (( 사용자 지정사용자 지정 ))

Page 24: Chap.2  Point processes

Practical Image Processing 24

contrast stretching : fig. 2.17 a, b)contrast stretching : fig. 2.17 a, b)

• produce brighter imageproduce brighter image

contrast compression : fig. 2. 17 c, d)contrast compression : fig. 2. 17 c, d)

• produce darker imageproduce darker image

posterizing : fig. 2. 18 a, b)posterizing : fig. 2. 18 a, b)

• reduce number of gray-levelsreduce number of gray-levels

thresholding : fig. 2. 18 c, d)thresholding : fig. 2. 18 c, d)

• produce binary imageproduce binary image

Page 25: Chap.2  Point processes

Practical Image Processing 25

Posterizing (6Posterizing (6 레벨레벨 ))

for (i=0; i<256; i++) { LUT[i] = (i + level-1) / n_level ; LUT[i] = LUT[i] * n_level;}

Page 26: Chap.2  Point processes

Practical Image Processing 26

bit clipping : fig. 2. 19bit clipping : fig. 2. 19

•set some MSB to 0set some MSB to 0

•transfer function : fig. 2. 19 a)transfer function : fig. 2. 19 a)

등 명암 윤곽화 등 명암 윤곽화 : : 그림 그림 2-21 a, b)2-21 a, b)

• 특정 특정 gray levelgray level 을 흰색을 흰색 // 검정색으로검정색으로

범위 강조 범위 강조 : : 그림 그림 2-22 a, b)2-22 a, b)

• 특정 특정 gray level gray level 범위를 흰색범위를 흰색 // 검정색으로검정색으로

Solarizing : fig 2-23 a, b)Solarizing : fig 2-23 a, b)

parabola transform : fig 2-24parabola transform : fig 2-24

Page 27: Chap.2  Point processes

Practical Image Processing 27

Homework # 1 : 4/10

다음 각 연산을 프로그램 하고 그 결과를 보여라다음 각 연산을 프로그램 하고 그 결과를 보여라 ..1) Histogram equalization2) Histogram stretching (basic method)3) Gamma correction (gamma = 1.5)4) Posterizing (4 levels)

결과물 결과물 (( 입력영상은 자유롭게 선택입력영상은 자유롭게 선택 ): ): 입력영상입력영상 , , 결과 영상 결과 영상 (( 히스토그램 포함히스토그램 포함 )) 프로그램프로그램 (( 해당함수만 인쇄해당함수만 인쇄 ))