목차
3. 점처리
3. 점처리(Pixel Point Process)
(1) 보수연산(Complement Operation)
반전 해주는 연산
I(x,y) + O(x,y) = 255
O(x,y) - 255 = I(x,y)
- for(y=0;y<YY;y++)
- for(x=0;x<XX;x++)
- image[y][x] = 255 - image[y][x];
(2) 이진화연산(Binarization Operation)
임계값을 기준으로 크면 흰색, 작으면 검정색으로 해주는 연산
if I(x,y) <= threshold
O(x,y) = 0;
else
O(x,y) = 255;
- for(y=0;y<YY;y++)
- for(x=0;x<XX;x++)
- if(image1[y][x] > 100) // 100은 threshold
- image2[y][x] = 255; // threshold 보다 크면
- else
- image2[y][x] = 0; // threshold 보다 작으면
(3) RGB Channel
컬러 영상에서 RGB 채널을 분리하는 연산
- for(y=0;y<YY;y++)
- for(x=0;x<XX*3;x+=3) // 추출할 색상 x값 (R : 0 G : 1 B : 2)
- image2[y][x] = image1[y][x];
(4) CMY Channel
컬러 영상에서 CMY 채널을 분리하는 연산
- for(y=0;y<YY;y++)
- for(x=0;x<XX*3;x+=3) // 추출할 색상 x값 (R : 0 G : 1 B : 2)
- image2[y][x] = image1[y][x];
- for(y=0;y<YY;y++)
- for(x=0;x<XX*3;x++) // w-r=c w-g=m w-b=y
- image2[y][x] = 255 - image2[y][x];
(5) RGB to GrayScale
컬러영상을 그레이스케일 영상으로 변환하는 연산
(R+G+B) / 3 으로 연산한다.
- for(y=0;y<YY;y++)
- for(x=0;x<XX;x++)
- image2[y][x] = ((image1[y][3*x] + image1[y][3*x+1] + image1[y][3*x+2])/3);
(6) 위치변환(Geometric Transformation)
y = f(x) 그래프의 이동
1. x 축에 대하여 대칭 이동한 방정식 : y 대신에 -y를 대입한다.
-y = f(x)
2. y 축에 대하여 대칭 이동한 방정식 : x대신에 -x를 대입한다.
y = f(-x)
1) flip Image(x축 대칭)
yout = (YY - 1) - yin
- for(y=0;y<YY;y++)
- for(x=0;x<XX*3;x++)
- image2[(YY-1)-y][x] = image1[y][x];
2) mirror Image(y축 대칭)
xout = (XX - 1) - xin
- for(y=0;y<YY;y++)
- for(x=0;x<XX*3;x++)
- image2[y][(XX-1)-x)] = image1[y][x];
(7) 영상 히스토그램(Image Historgram)
영상의 밝기 특성을 나타낸 픽셀 분포그래프이다.
가로축은 픽셀의 값 0 ~ 255까지의 밝기(Brightness)를 나타내며, 세로축은 밝기에 해당하는 픽셀의 개수를 나타낸다.
(이미지 1)
가운데 쪽에 히스토그램이 분포해야 적당한 영상이 된다.
밝기의 빈도수를 나타낸다.
(이 이미지는 히스토그램 후 자르고 flip한 영상)
- int frequency[8] = {0}; // 3bit 영상용 빈도수
- int bright; // 밝기
- for(y=0;y<YY;y++)
- for(x=0;x<XX;x++){
- bright = image1[y][x]; // 해당위치의 밝기
- frequency[bright] = frequency[bright]+1; // 밝기의 빈도 수 증가
- }
(8) 산수 연산
입력 영상의 모든 픽셀에 상수를 더하거나 빼거나 곱하거나 나누는 연산을 한다.
1) 히스토그램 슬라이딩(Histogram Sliding)
입력 영상의 모든 픽셀에 밝기 상수를 더하거나 뺀다.
출력영상은 어두워짐
O(x,y) = I(x,y) ± brightness
※ Clamping : 산술연산을 한 후에는 결과 영상의 픽셀 값이 255보다 크면 255로, 0보다 작으면 0으로 잘라내는 것
Arithmetic Operations => 문제 : saturation(포화) => 해결 : Clamping(자름)
- for(y=0;y<YY;y++)
- for(x=0;x<XX;x++){
- image2[y][x] = image1[y][x] + 50;
- if(image2[y][x] > 255) // 더하기 연산시 saturation 방지
- image2[y][x] = 255;
- else if(image2[y][x] < 0) // 빼기 연산시 saturation 방지
- image2[y][x] = 0;
- }
2) 히스토그램 스트레칭(Histogram Stretching)
입력 영상의 모든 픽셀에 대비(contrast) 상수를 곱하거나 나누는 연산
출력영상은 Contrast가 개선
Ex) 달의 분화구 사진 개선
O(x,y) = I(x,y) X contrast
(이미지 2)
※ Contrast : 밝고 어두운 비(명암비)
밝기 255를 3000으로 쏘느냐 1000으로 쏘느냐 차이
※ Histogram의 최대 최소
- for(bright=255;bright>=0;bright--) // 밝기가 큰것부터
- if(frequency[bright]){ // 만약 값이 0이 아니면
- max = bright;
- break; // 첫 지점에서 탈출
- }
- for(bright=255;bright<256;bright++) // 밝기가 작은것부터
- if(frequency[bright]){ // 만약 값이 0이 아니면
- min = bright;
- break; // 첫 지점에서 탈출
- }
※ 명암대비 스트레칭
O(x,y) = I(x,y)-min / max-min * 255
- for(y=0;y<YY;y++)
- for(x=0;x<XX;x++)
- image[y][x] = (float)(image[y][x]-min) / (max-min) *255;
이미지 출처)
1. http://what-when-how.com/wp-content/uploads/2011/09/tmp646_thumb.jpg