1 / 163

2 장 . 컬러 공간 분석

2 장 . 컬러 공간 분석. 임은경. 차례 및 목적. 차례 컬러 공간에 대한 이야기 RGB 컬러 공간과 명암도 영상 변환 HIS 컬러 공간 CMY(K) 컬러 공간 다른 컬러 공간 HLS, HSL 컬러 공간 YCbCr, YUB, YIQ 컬러 공간 Visual C++ 구현과 CxImage 제공 함수 비교. 컬러 공간에 대한 이야기. 컬러와 컬러공간의 관계 컬러 공간

Download Presentation

2 장 . 컬러 공간 분석

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2장. 컬러 공간 분석 임은경 2주차 - 디지털영상처리의개념

  2. 차례 및 목적 • 차례 • 컬러 공간에 대한 이야기 • RGB 컬러 공간과 명암도 영상 변환 • HIS 컬러 공간 • CMY(K) 컬러 공간 • 다른 컬러 공간 • HLS, HSL 컬러 공간 • YCbCr, YUB, YIQ 컬러 공간 • Visual C++구현과 CxImage 제공 함수 비교 2주차 - 디지털영상처리의개념

  3. 컬러 공간에 대한 이야기 • 컬러와 컬러공간의 관계 • 컬러 공간 • 개별 컬러들의 상대적인 위치를 나타내는 컬러 좌표계9color coordinates system)을표현하는 2차원 또는 3차원 공간을 의미함 • 컬러 표현 시스템(colorrepresentation system), 컬러모델(colormodel)로도사용함 • 모니터에서 사용하는 컬러의 개념, 프린터에 사용되는 화려한 컬러의 개념 • 모니터에서는 RGB 채널 구조 • 빛의 삼원색 • 인쇄소에서는 CMY(K) 채널 구조 • 빛의 반사를 기반으로 둔 감원색 2주차 - 디지털영상처리의개념

  4. 컬러 공간에 대한 이야기 가산 색 모형 감산 색 모형 RGB 컬러 모형 CMY 컬러 모형 2주차 - 디지털영상처리의개념

  5. 컬러 공간에 대한 이야기 • 인간의 시각 시스템 – HIS 컬러 모델 • RGB 컬러 모델과는 다른 형태를 사용함 2주차 - 디지털영상처리의개념

  6. RGB 컬러 공간과 명암도 영상 변환 • RGB 모델은 빛의 삼원색을 이용한 모델이다. 빨간(red), 파랑(blue), 녹색(green)의 세가지 기본 칼라의 조합을 이용해서 칼라를 표현한다. (그림 2.4, 그림 2.5, 그림 2.6, 그림 2.7) • RGB 모델은 다음 그림과 같이 R, G, B를 나타내는 3차원 좌표계로 표현됨 • 좌표점 (0, 0, 0)은 검은색을 나타내며, (1, 1, 1)은 흰색을 나타내며, 검은색과 흰색을 연결하는 대각선은 빨간, 파랑, 녹색의 세 가지 색이 동등한 비율로 혼합된 색으로 흑백영상의 광도를 가짐 • 각각의 좌표계는 빨간, 파랑, 녹색이 합해지는 비율에 따라 다양한 색이 표현됨 2주차 - 디지털영상처리의개념

  7. RGB 컬러 공간과 명암도 영상 변환 • RGB 칼라 영상의 그레이 레벨(Gray-Scale)의 영상변환 • RGB 칼라 모델을 그레이 레벨의 흑백영상으로 바꾸기 위해서는 다음 방식으로 변환될 수 있다. 두번째 식은 TV나 모니터 등에서 사용되는 수식이며, 첫번째 식은 나머지 대부분의 응용에서 사용됨 • GrayLevel = 0.333*Red + 0.333*Green + 0.333*Blue • GrayLevel = 0.299*Red + 0.587*Green + 0.114*Blue • NTSC 제안 • 각 Red, Green, Blue 중 한가지만 사용 • Green만 사용 • GrayLevel = 0.212671*Red + 0.715160*Green + 0.071169*Blue 2주차 - 디지털영상처리의개념

  8. RGB 컬러 공간과 명암도 영상 변환 • 앞의방식을 이용한 RGB영상  Gray Level 영상으로 변환한 예제 • 그림 2.8 2주차 - 디지털영상처리의개념

  9. RGB 컬러 공간과 명암도 영상 변환 • 클래스 생성하기 • 컬러 변환과 관련된 클래스 만들기 2주차 - 디지털영상처리의개념

  10. RGB 컬러 공간과 명암도 영상 변환 생성된 클래스의 상황 2주차 - 디지털영상처리의개념

  11. RGB 컬러 공간과 명암도 영상 변환 • 클래스에 메소드 추가하기 • void CColor::GS_rgb2gray(BYTE ***gray, int method, BYTE **red, BYTE **green, BYTE **blue, int height, int width) • BYTE **CColor:::GS_alloc2D(int height, int width) • BYTE **CColor::GS_alloc2D(int height, int width, BYTE value) • CxImage *CColor::GS_gray2CxImage(BYTE **image, int height, int width) • void CColor::GS_free2D(BYTE **image, int length) 2주차 - 디지털영상처리의개념

  12. RGB 컬러 공간과 명암도 영상 변환 • void CColor::GS_getRGB(CxImage *m_pImage, BYTE ***red, BYTE ***green, BYTE ***blue, int *height, int *width) • void CColor::GS_getRGB(CxImage *m_pImage, BYTE ***red, BYTE ***green, BYTE ***blue) • 헤더파일 추가하기 • #include <stdio.h> • #include <stdlib.h> • #include <math.h> 2주차 - 디지털영상처리의개념

  13. RGB 컬러 공간과 명암도 영상 변환 • 구현하기 • 메모리 할당하는 함수 /** 2차원 메모리 할당 - BYTE */ BYTE** CColor::GS_alloc2D(int height, int width) { return GS_alloc2D(height, width, 0); } /** 2차원 메모리 할당 - BYTE */ BYTE **CColor::GS_alloc2D(int height, int width, BYTE value) { BYTE **image; image = (BYTE **)calloc(height, sizeof(BYTE *)); for(int i=0; i<height; i++) 2주차 - 디지털영상처리의개념

  14. RGB 컬러 공간과 명암도 영상 변환 { image[i] = (BYTE *)calloc(width, sizeof(BYTE)); } if( value > 0 ) { for(i=0; i<height; i++) for(int j=0; j<width; j++) image[i][j] = (BYTE)value; } return image; } 2주차 - 디지털영상처리의개념

  15. RGB 컬러 공간과 명암도 영상 변환 • /*명암도 영상을 CxImage 타입으로 변환한다. */ CxImage *CColor::GS_gray2CxImage(BYTE **image, int height, int width) { int bitPixels = 8; // 8이면 명암도 CxImage *cxGray = new CxImage(); cxGray->CreateFromMatrix( image, width, height, bitPixels, width*bitPixels, 0); return cxGray; } 2주차 - 디지털영상처리의개념

  16. RGB 컬러 공간과 명암도 영상 변환 • /** 할당된 메모리 해제 - BYTE */ • void CColor::GS_free2D(BYTE **image, int length) • { • for(int i=0; i<length; i++) • free( image[i] ); • free(image); • } 2주차 - 디지털영상처리의개념

  17. RGB 컬러 공간과 명암도 영상 변환 • /** RGB를 가져온다 */ void CColor::GS_getRGB(CxImage *m_pImage, BYTE ***red, BYTE ***green, BYTE ***blue) { int height, width; GS_getRGB(m_pImage, red, green, blue, &height, &width); } void CColor::GS_getRGB(CxImage *m_pImage, BYTE ***red, BYTE ***green, BYTE ***blue, int *height, int *width) { RGBQUAD color; *height = m_pImage->GetHeight(); *width = m_pImage->GetWidth(); 2주차 - 디지털영상처리의개념

  18. RGB 컬러 공간과 명암도 영상 변환 *red = (BYTE **)GS_alloc2D( *height, *width ); *green = (BYTE **)GS_alloc2D( *height, *width ); *blue = (BYTE **)GS_alloc2D( *height, *width ); for(int i=0; i<*height; i++) { for(int j=0; j<*width; j++) { color = m_pImage->GetPixelColor(j, i); (*red)[i][j] = color.rgbRed; (*green)[i][j] = color.rgbGreen; (*blue)[i][j] = color.rgbBlue; } } } 2주차 - 디지털영상처리의개념

  19. RGB 컬러 공간과 명암도 영상 변환 • RGB컬러 공간을 명암도 영상으로 변환 void Ccolor::GS_rgb2gray(BYTE ***gray, int method, BYTE **red, BYTE **green, BYTE **blue, int height, int width) { if( method < 0 || method > 4 ) return; *gray = (BYTE **)GS_alloc2D( height, width ); for(int i=0; i<height; i++) { for(int j=0; j<width; j++) { switch( method ) { case 1 : (*gray)[i][j] = (BYTE)( red[i][j]*0.2999 + green[i][j]*0.587 + blue[i][j]*0.114 ); break; 2주차 - 디지털영상처리의개념

  20. RGB 컬러 공간과 명암도 영상 변환 case 2 : (*gray)[i][j] = (BYTE)( ( red[i][j] + green[i][j] + blue[i][j] )/3.0 ); break; case 3 : (*gray)[i][j] = green[i][j]; break; case 4 : (*gray)[i][j] = (BYTE)( sqrt( pow(red[i][j],2) + pow(green[i][j],2) + pow(blue[i][j],2))/sqrt(3.0) ); break; case 5 : (*gray)[i][j] = (BYTE)( red[i][j]*0.212671 + green[i][j]*0.715160 + blue[i][j]*0.071169 ); break; } } } } 2주차 - 디지털영상처리의개념

  21. RGB 컬러 공간과 명암도 영상 변환 헤더 파일의 모습 2주차 - 디지털영상처리의개념

  22. RGB 컬러 공간과 명암도 영상 변환 • 메뉴 추가하기 • Rgb2gray • CxImage • ID : ID_CH2_RGB2GRAY_CXIMAGE • 연동한 프로그램에서 RGB2GRAY변환 함수 사용하기 • VisualGS • ID : ID_CH2_RGB2GRAY_GS • 직접 구현한 함수 사용하기 • Split • recover 2주차 - 디지털영상처리의개념

  23. RGB 컬러 공간과 명암도 영상 변환 • View 클래스에서 Color 클래스를 사용하기 위해 헤더 추가하기 • #include "Color.h" 2주차 - 디지털영상처리의개념

  24. RGB 컬러 공간과 명암도 영상 변환 • 추가된 메뉴에 함수 연결하기 • CXIMAGE 메뉴에 연결할 함수 만들기 2주차 - 디지털영상처리의개념

  25. RGB 컬러 공간과 명암도 영상 변환 • 함수 구현하기 void CFirstCxImageView::OnCh2Rgb2grayCximage() { // 도큐먼트 클래스에 있는 m_pImage를 가져오기위해참조 호출한다. CFirstCxImageDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // GrayScale() 함수 호출 pDoc->m_pImage->GrayScale(); CString str; str.Format("명암도 영상 변환 from %s",pDoc->GetTitle()); pDoc->SetTitle(str); Invalidate( FALSE ); } 2주차 - 디지털영상처리의개념

  26. RGB 컬러 공간과 명암도 영상 변환 • 추가된 메뉴에 함수 연결하기 • VisualGS 메뉴에 연결할 함수 연결하기 2주차 - 디지털영상처리의개념

  27. RGB 컬러 공간과 명암도 영상 변환 • 함수 구현하기 void CFirstCxImageView::OnCh2Rgb2grayGs() { CFirstCxImageDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); BYTE **red; BYTE **green; BYTE **blue; BYTE **gray; int height = 0; int width = 0; int method = 1; CColor cColor; // RGB를 가져온다. cColor.GS_getRGB( pDoc->m_pImage, &red, &green, &blue, &height, &width ); 2주차 - 디지털영상처리의개념

  28. RGB 컬러 공간과 명암도 영상 변환 // RGB to Gray cColor.GS_rgb2gray(&gray, 1, red, green, blue, height, width); CxImage *newG = cColor.GS_gray2CxImage(gray, height, width); pDoc->CopyClipBoard(newG); ((CFirstCxImageApp *)AfxGetApp())->OnEditPaste(); cColor.GS_rgb2gray(&gray, 2, red, green, blue, height, width); newG = cColor.GS_gray2CxImage(gray, height, width); pDoc->CopyClipBoard(newG); ((CFirstCxImageApp *)AfxGetApp())->OnEditPaste(); cColor.GS_rgb2gray(&gray, 3, red, green, blue, height, width); newG = cColor.GS_gray2CxImage(gray, height, width); pDoc->CopyClipBoard(newG); ((CFirstCxImageApp *)AfxGetApp())->OnEditPaste(); 2주차 - 디지털영상처리의개념

  29. RGB 컬러 공간과 명암도 영상 변환 cColor.GS_rgb2gray(&gray, 4, red, green, blue, height, width); newG = cColor.GS_gray2CxImage(gray, height, width); pDoc->CopyClipBoard(newG); ((CFirstCxImageApp *)AfxGetApp())->OnEditPaste(); cColor.GS_rgb2gray(&gray, 5, red, green, blue, height, width); newG = cColor.GS_gray2CxImage(gray, height, width); pDoc->CopyClipBoard(newG); ((CFirstCxImageApp *)AfxGetApp())->OnEditPaste(); cColor.GS_free2D( red, height ); cColor.GS_free2D( green, height ); cColor.GS_free2D( blue, height ); cColor.GS_free2D( gray, height ); Invalidate( FALSE ); } 2주차 - 디지털영상처리의개념

  30. RGB 컬러 공간과 명암도 영상 변환 • 원영상과 영역 분할 영상 • 그림 2.9 • 영상의 영역 분할 • 각 비슷한 화소값끼리 모아 영역(region)으로 만드는 것 • 영상 검색, 배경 및 객체 분해 등에 많이 응용 • 양자화 • 큰 자연 영상을 모바일 같은 작은 공간에 옮기기 위해 압축 작업이 필요 • 1600만 컬러 영역을 256 컬러 영상으로 변환함. • 그림 2.10 2주차 - 디지털영상처리의개념

  31. RGB 컬러 공간과 각 채널 분리 pp.144에서처럼 RGB 컬러 모델을 각 채널별로 분리함 이를 구현해보자. 2주차 - 디지털영상처리의개념

  32. RGB 컬러 공간과 각 채널 분리 • Split 방법론 들은 CxImage 방식과 직접 구현한 VisualGS 방식을 이용함 2주차 - 디지털영상처리의개념

  33. RGB 컬러 공간과 각 채널 분리 • CXIMAGE 를 이용한 방식 • 메뉴에 연결할 함수 만들기 • CXIMAGE • ID : ID_CH2_SPLIT2RGB_CXIMAGE • VisualGS • ID : ID_CH2_SPLIT2RGB_GS 2주차 - 디지털영상처리의개념

  34. RGB 컬러 공간과 각 채널 분리 • 메뉴에 연결할 함수 만들기 2주차 - 디지털영상처리의개념

  35. RGB 컬러 공간과 각 채널 분리 • 구현하기 void CFirstCxImageView::OnCh2Split2rgbCximage() { CFirstCxImageDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (pDoc->m_pImage==NULL) return; CxImage *newr = new CxImage(); CxImage *newg = new CxImage(); CxImage *newb = new CxImage(); pDoc->m_pImage->SplitRGB(newr,newg,newb);// RGB 분리 pDoc->CopyClipBoard(newr); ((CFirstCxImageApp *)AfxGetApp())->OnEditPaste(); 2주차 - 디지털영상처리의개념

  36. RGB 컬러 공간과 각 채널 분리 pDoc->CopyClipBoard(newg); ((CFirstCxImageApp *)AfxGetApp())->OnEditPaste(); pDoc->CopyClipBoard(newb); ((CFirstCxImageApp *)AfxGetApp())->OnEditPaste(); Invalidate( FALSE ); } 2주차 - 디지털영상처리의개념

  37. RGB 컬러 공간과 각 채널 분리 • VisualGS에서 RGB채널 분류하기 • 직접 구현하기 위해서…CColor 클래스에 함수 추가하기 • 필요한 함수는 다음과 같다. • void CColor::GS_getRGB(CxImage *m_pImage, BYTE ***red, BYTE ***green, BYTE ***blue) • CxImage *CColor::GS_gray2CxImage(BYTE **image, int height, int width) • void CColor::GS_free2D(BYTE **image, int length) • 앞에서구현이 되었음. 2주차 - 디지털영상처리의개념

  38. RGB 컬러 공간과 각 채널 분리 • 메뉴에 연결할 함수 만들기 2주차 - 디지털영상처리의개념

  39. RGB 컬러 공간과 각 채널 분리 • 구현하기 void CFirstCxImageView::OnCh2Split2rgbGs() { CFirstCxImageDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if( pDoc->m_pImage == NULL ) return; CColor cColor; BYTE **red; BYTE **green; BYTE **blue; int height = 0; int width = 0; // RGB를 가져온다. cColor.GS_getRGB( pDoc->m_pImage, &red, &green, &blue, &height, &width ); 2주차 - 디지털영상처리의개념

  40. RGB 컬러 공간과 각 채널 분리 CxImage *newr = cColor.GS_gray2CxImage(red, height, width); pDoc->CopyClipBoard(newr); ((CFirstCxImageApp *)AfxGetApp())->OnEditPaste(); CxImage *newg = cColor.GS_gray2CxImage(green, height, width); pDoc->CopyClipBoard(newg); ((CFirstCxImageApp *)AfxGetApp())->OnEditPaste(); CxImage *newb = cColor.GS_gray2CxImage(blue, height, width); pDoc->CopyClipBoard(newb); ((CFirstCxImageApp *)AfxGetApp())->OnEditPaste(); 2주차 - 디지털영상처리의개념

  41. RGB 컬러 공간과 각 채널 분리 // 메모리 해제 cColor.GS_free2D( red, height ); cColor.GS_free2D( green, height ); cColor.GS_free2D( blue, height ); Invalidate( FALSE ); } 2주차 - 디지털영상처리의개념

  42. RGB 컬러 공간과 각 채널 분리 • 앞의 방법의 실행 결과 • 각 red, green, blue채널이 gray image로 나타남 • 각 채널이 가지는 값으로 표현하기. • Red 채널  red형식으로 • Green 채널  green형식으로 • Blue 채널  blue형식으로… • 이를 구현하시오. 2주차 - 디지털영상처리의개념

  43. RGB 컬러 공간과 각 채널 분리 • 레포트 -1- • 앞의 방식대로 구현하시오. • 제출일 • 11월 11일제출하기 • 제출시 주의 사항 • 제목 : 레포트1_자신의학과학번이름 • 이름 : 자신의 이름 • 파일 첨부를 통해서 올려주세요. • 파일 이름 : color.cpp 또는 View 클래스 내에서 구현하기 위해서 생성되는 함수와 연결되는 함수들을 표현하고 이들에 대한 설명와 같이 메모장에 추가하여 넣어서 제출하기 • 파일 명 : 레포트1_자신의학과학번이름.txt 2주차 - 디지털영상처리의개념

  44. HIS 컬러 공간 • 다양한 컬러 모델 공간 • RGB • 모니터와 같은 디스플레이 장치에 사용됨 • YIQ • TV 방송 • CMY • 인쇄소 프린터, 하드카피 출력 • YUV • 유럽에서 사용되는 TV 방송 • YCbCr • JPEG 압축 분야 2주차 - 디지털영상처리의개념

  45. HIS 컬러 공간 • HSI 모델은 인간의 색 인지 방법에 기반을 둔 모델이다. H는 색상(Hue), S는 채도(Saturation), I는 명도(intensity)를 나타냄 • 이 색상 모델을 사용한다면 특정한 칼라를 만들어내기 위해 색을 조합할 필요가 없다. 왜냐하면 H 자체가 색상 정보를 나타내기 때문이다. • 색상 H는 빨간, 파랑, 녹색 등의 색을 구별하기 위해 사용되는 축으로 0~360도의 범위를 가진 각도 값으로 나타낸다. 0도는 빨강, 120도는 초록, 240도는 파랑색을 나타냄 2주차 - 디지털영상처리의개념

  46. HIS 컬러 공간 • Hue(색상) • 빛의 파장 자체의 시각적 특징을 나타냄 • 물체에 반사되어 나온 파장을 색상 관점에서 구별 가능 • 빨강,, 노랑과 같은 순수한 색깔(pure color)을 나타내고 흰색과 검정, 회색은 색상이 아님 • Saturation(채도) • 색이얼마나 순수한지를 나타냄 • White와 pure color와의 혼합비율에 의해 0~100% • 순수한빨강 – 채도가 높음, 핑크 – 채도가 낮음 • 색의 맑고 탁한 정보를 결정하는 특성 2주차 - 디지털영상처리의개념

  47. HIS 컬러 공간 • Intensity(명도, value, lightness) • 빛의 세기 • 색의 밝고 어두운 것을 느끼게 하는 것 • 색입체의 예제 • 그림 2.11 • 명도는 수직선으로 표현됨(0-1) • 색상은 원으로표현됨(0에서 360도) • 채도는 방사선으로 표현됨(0-1) • 예제 • 빨강 : Hue = 0, Saturation = 1, Intensity = 0.333 2주차 - 디지털영상처리의개념

  48. HIS 컬러 공간 색 입체 2주차 - 디지털영상처리의개념

  49. HIS 컬러 공간 RGB 컬러 모델로부터 HSI 컬러 모델로의 변환은 다음 식을 이용하여 가능함 2주차 - 디지털영상처리의개념

  50. HIS 컬러 공간 HSI 컬러모델로부터 RGB 컬러모델로의 변환은 H 값에 따라 다르다. H의 값이 0도~120도 이내인 경우는 첫번째 식과 같이 수행되며, H의 값이 120도~240도 이내이면 두번째 식, H의 값이 240도~360도의 범위내이면 세번째 식을 사용 2주차 - 디지털영상처리의개념

More Related