교수님이 자료 올려주신 것.
'Study > CxImage' 카테고리의 다른 글
컬러 공간 분석 (0) | 2009.03.23 |
---|---|
CxImage 제공 함수 (0) | 2009.03.18 |
라이브러리 함수 사용자 작성 (0) | 2009.03.18 |
CxImage 라이브러리 함수 (0) | 2009.03.18 |
기본 시작 함수 (0) | 2009.03.18 |
교수님이 자료 올려주신 것.
컬러 공간 분석 (0) | 2009.03.23 |
---|---|
CxImage 제공 함수 (0) | 2009.03.18 |
라이브러리 함수 사용자 작성 (0) | 2009.03.18 |
CxImage 라이브러리 함수 (0) | 2009.03.18 |
기본 시작 함수 (0) | 2009.03.18 |
컬러의 개념
- 빛의 자극으로 생기는 감각의 일종.
- 빛이 물체에 반사 또는 흡수함으로써 시각적으로 색을 느낌. - 인간의 눈에 보이는 가시광선. |
RGB 컬러공간
- 빨강, 초록, 파랑, 가산혼합 - 기본 컬러공간: 컬러의 빛을 물리적으로 검출하고 만드는데 사용되기 때문. 컬러 영상을 획득하여 표시하는 공간. 영상처리에 있어 모니터는 필수. 컴퓨터 모니터에서 3원색을 조합하여 사용.
- 영상에 대한 다양한 정의: 컬러를 표현하는 화소값의 배열. 색과 점의 공간 파형으로 정의. 임의의 방향에 대한 밀도의 공간 분포로 표현. 컬러 공간 모델로부터 계산된 밀도를 표현하는 raster 순서에 저장된 숫자값의 매트릭스에 의해 표현.
- 명암도 영상 변환 공식 RGB 컬러공간: 0.333 * Red + 0.333 * Green + 0.333 * Blue NTSC 제안: 0.299 * Red + 0.587 * Green + 0.114 * Blue SQRT(Red^2 + Blue^2) / SQRT(3) 각 R,G,B 값 중 한가지만 사용.
- 다른 영상 처리 응용에 한계: RGB컬러 요소들의 상호 관계가 너무 커서 특정 색상망 분리가 어려움. - 이를 보완할 수 있는 HSI 컬러 공간이 존재. |
HSI 컬러공간
- 인간이 색깔을 인식하는 세가지 요인인 Hue, Saturation, Intenstity를 컬러 공간으로 옮겨 놓은 것.
색의 3요소: - Hue(색상): 빨강, 노랑 ,파랑 등과 같이 다른 색과 구별될 수 있는 색의 명칭이나 색의 특성, 색의 구분, 순수색. - Saturation(채도): 색깔이 '연하다', '진하다', '탁하다'하는 등의 정도를 나타내는 말. - Intensity(명도): 색의 밝고 어두운 정도, 즉 색의 명암. - 색입체: 먼셀, 오스왈드, P.C.C.S등
- Hue: 원통 모양의 주변, 순수색 표현(0 ~ 360) - Saturation: 중심으로부터의 거리(0 ~ 1) - Intensity: 하단 꼭지점에서 최상부까지의 거리(0 ~ 1)
|
CMY(K) 컬러 공간
- 색의 3원색: 청록(Cyan), 자홍(Magenta), 노랑(Yellow), 감산혼합
- Cyan = 255 - Red = Green + Blue. - Magenta = 255 - Green = Red + Blue. - Yellow = 255 - Blue = Red + Green.
- Cyan _ Magenta + Yellow = 검정(K) -> 이론상 - k = min(Cyan, Magenta, Yellow). - C = 기존 Cyan - K - M = 기존 Magenta - K - Y = 기존 Yellow - K - CMYK 컬러 공간의 한계: RGB보다 작은 범위인 관계로 한계가 있다. 다소 뿌옇게 인쇄(선명도 떨어짐). CMYK 형태로 직접 모니터로 불러들여 작업하지 않음.(CMYK(모니터)->RGB(인쇄)->CMYK). |
다른 컬러 공간
- YIQ
–인간의 시각체계와 유사하게 흉내낸 최초의 컬러 공간
–1950년대, 컬러 텔레비전(NTSC방식) 개발자들에 의해 구성
–명도(Luminance)와 색도(chrominance)요소
–Y는 명도 - 밝기를 가지는 흑백영상의 수상기에 나타나는 영상을 표시
- YUV
–PAL 방식의 TV에서 사용되는 컬러 공간
–인간의 눈이 색상보다는 밝기에 민감하다는 사실에 착안한 방식
–Y:U:V 의 비율을 통상 4:2:2로 구성한다.
- YCbCr
–색상 정보로부터 명도를 분리하는 또 하나의 다른 컬러 공간
–Y는 명도 , Cb 푸른색 , Cr 붉은색의 정보를 표시
–JPEG, MPEG 및 디지털 텔레비전의 표준으로 사용 |
GS_Library (0) | 2009.03.28 |
---|---|
CxImage 제공 함수 (0) | 2009.03.18 |
라이브러리 함수 사용자 작성 (0) | 2009.03.18 |
CxImage 라이브러리 함수 (0) | 2009.03.18 |
기본 시작 함수 (0) | 2009.03.18 |
1. 파일처리
Load | 특정 포맷을 갖는 영상 파일을 읽는다. |
LoadResource | 리소스에 저장한 영상 데이터를 읽어 들인다. |
Save | 특정 포맷을 갖는 영상 파일로 저장한다. |
Decode | 메모리 버퍼에 있는 특정 포맷을 갖는 영상 데어티를 읽는다. |
Encode | 특정 포맷을 갖는 영상 데어티를 메모리 버퍼에 저장한다. |
2. 영상정보 관리
- 정보 가져오기
GetBits | 영상 데어티가 있는 포인터를 반환한다. |
GetBpp | 화소당 비트수를 반환한다. |
GetDIB | 영상 데이터의 DIB(Device Independent Bitmap)을 반환한다. |
GetHeight | 영상 데이터의 높이를 반환한다. |
GetWidth | 영상 데이터의 너비를 반환한다. |
GetPalette | 팔레트 정보의 첫 번째 인덱스가 있는 포인터를 반환한다 |
GetPixelColor | 영상 데이터 내 해당 화소값을 RGB 데이터로 반환한다. |
GetPixelGray | 영상 데이터 내 해당 화소값을 명암값을 반환한다. |
GetPixelIndex | 영상 데이터 내 해당 화소값을 인덱스를 반환한다. |
- 정보 설정하기
SetPalette | 팔레트 정보를 설정한다. |
SetPixelColor | 영상 데이터 내 해당 화소값을 RGB 데이터로 설정한다. |
SetPixelIndex | 영상 데이터 내 해당 화소값을 명암값으로 설정한다. |
SetTransColor | 24비트 영상에 투명도를 컬러로 설정한다. |
SetTransIndex | 1, 4, 8 비트 영상에 투명도를 인덱스로 설정한다. |
- 정보 일치 확인
IsEnabled | 페인팅(painting)이 가능하면 true를 반환한다. |
IsTransfered | 투명도가 가능하면 true를 반환한다. |
IsValid | 영상 데이터가 불러들인 상태이면 true를 반환한다. |
- 정보 생성하기
Copy | 기존 영상 데이터를 복사하여 새로운 영상 데이터를 만든다. |
Create | 높이, 너비 등을 인자로 받아 새로운 영상 데이터를 만든다. |
CreateFromHBITMAP |
DDB(Device Dependent Bitmap)을 갖고 새로운 영상 데이터 |
CreateFromHANDLE |
클립보드와 같은 클로벌 핸들에서 얻은 것을 갖고 새로운 영상 데 이터를 만든다. |
CopyToHandle | 기존 영상 데이터를 클립보드와 같은 글로벌 핸들에 복사한다. |
CreateFromArray | 1차원 배열을 갖고 새로운 영상 데이터를 만든다. |
- 정보 해제하기
Transfer |
기존 영상 데이터를 새로운 영상 데이터에 복사한다. 그 후 기존 영상 데이터의 내용을 비운다. |
Destory | 기존 영상 데이터에 할당한 메모리를 해제한다. |
FreeMemory |
메모리 버퍼에 올려져 있는 영상 데이터에 할당한 메모리를 해제 한다. |
Clear | 영상 데이터의 특정 화소값을 새로 초기화 한다. |
- 정보 출력하기
Draw | 영상 데이터를 DC(Device Context)에 보내어 출력한다. |
DrawText | 영상 데이터 안에 문자열을 삽입한다. |
3. 컬러 공간 처리
- 컬러 공간 분리
GrayScale | 명암도 영상으로 변환한다. |
HSLtoRGB | HSL 컬러 공간을 RGB 컬러 공간으로 변환한다. |
RGBtoHSL | RGB 컬러 공간을 HSL 컬러 공간으로 변환한다. |
Threshold | 이진 영상으로 변환한다. |
-컬러 공간 분리
SplitCMYK | CMYK 컬러 공간을 채널별로 분리한다. |
SpliHSL | HSL 컬러 공간을 채널별로 분리한다. |
- 변환
RGBQUARDtoRGB | 팔레트 정보를 갖는 RGBQUARD 구조체 배열을 RGB로 변환한다. |
RGBtoRGBQUARD | RGB를 팔레트 정보를 갖는 RGBQUARD 구조체 배열로 변환한다. |
- 기타
Colorize | 영상의 Hue, Staturation 값을 대치한다. |
HuePalette | 무지개 팔레트를 생성한다. |
ShiftRGB | 영상의 R,G,B값을 조절한다. |
DecreaseBpp | 화소당 비트수를 감소시킨다. |
IncreaseBpp | 화소당 비트수를 증가시킨다. |
4. 변환처리
- 필터링
Dither | 이진 영상으로 변환한다. (총 7가지 방법 제공) |
Dilate | 영상의 밝은 부분을 개선한다. |
Erode | 영상의 어두운 부분을 개선한다. |
Filter | 2차원 마스크를 갖고 회선하여 필터링한다. |
Gamma | 컬러 영상의 밸런스를 조절한다. |
Jitter | 영상내 각 화소 위치를 기준으로 난수를 발생시켜 효과를 얻는다. |
Light | 영상의 밝기와 대비조절을 한다. |
Mean | 영상에 평균값 필터링한다. |
Median | 영상에 중간값 필터링한다. |
Mix | 두 영상을 블렌딩(blending)처리한다. |
Repair | 인위적으로 생긴 효과를 제거하기 위한 블러링 수행한다. |
- 잡음관련
Noise | 동형 잡음(uniform noise)을 더한다. |
- 주파수 영역
FFT2 | FFT(Fast Fourier Transform: 고속 퓨리에 변환)를 수행한다. |
- 히스토그램
Histogram | 영상의 히스토그램 정보를 얻는다. |
HistogramEqualize | 영상에 히스토그램 평활화를 수행한다. |
HistogramStreach | 영상에 히스토그램 스트레칭을 수행한다. |
- 기타
Combine | R,G,B, 알파 채널을 하나의 영상으로 병합한다. |
Contour | 영상의 윤곽을 추출한다. |
Lut | 룩업 테이블(Lookup table)을 영상에 적용한다. |
Negative | 역 변환을 수행하여 영상을 반전한다. |
RedEyeRemove | 적목 현상을 제거한다. |
5. 기하학 변환
Corp | 영상의 일부를 추출한다. |
Flip | 영상의 상하를 뒤집는다. |
Resample | 영상의 크기를 조절한다. |
Mirror | 영상의 좌우를 뒤집는다. |
Skew | 영상을 비스듬하게 한다. |
Expand | 영상의 주변(border)을 확장한다. |
Rotate | 회전한다. |
GS_Library (0) | 2009.03.28 |
---|---|
컬러 공간 분석 (0) | 2009.03.23 |
라이브러리 함수 사용자 작성 (0) | 2009.03.18 |
CxImage 라이브러리 함수 (0) | 2009.03.18 |
기본 시작 함수 (0) | 2009.03.18 |
Jitter효과
- 새로운 클래스 생성 후 math 헤더파일 추가
- 코드
RGBQUAD color;
int rnd_height, rnd_width;
// 영상의 높이와 너비를 가져온다.
int height = m_pImage->GetWidth();
int width = m_pImage->GetWidth();
for(int i=0; i<height; i++)
{
for(int j=0; j<width; j++)
{
rnd_height = i + (long)((rand() / (float)RAND_MAX - 0.5) * (radius * 2));
rnd_width = j + (long)((rand() / (float)RAND_MAX - 0.5) * (radius * 2));
// 영상의 범위를 넘어서면
if(rnd_height > height || rnd_width > width)
{
rnd_height = height;
rnd_width = width;
}
// 영상(rnd_width, rnd_height)내 화소값에서 R,G,B값을 가져온다.
color = m_pImage->GetPixelColor(rnd_width, rnd_height);
// 영상 내 화소값의 R,G,B에 할당한다.
m_pImage->SetPixelColor(j, i, color);
}
}
- 메뉴바에 새로운 메뉴 생성 후 호출 함수 정의 (View클래스)
// 도큐먼트 클래스에 있는 m_pImage를 가져오기 위해 참조 호출한다.
CKDY013Doc *pDoc = GetDocument();
ASSERT_VALID(pDoc);
CFilter cFilter;
cFilter.GS_Jitter(pDoc->m_pImage, 4);
// 화면 갱신
Invalidate(FALSE);
컬러 공간 분석 (0) | 2009.03.23 |
---|---|
CxImage 제공 함수 (0) | 2009.03.18 |
CxImage 라이브러리 함수 (0) | 2009.03.18 |
기본 시작 함수 (0) | 2009.03.18 |
CxImage 소개 및 기본 설치 (0) | 2009.03.11 |
Jitter 효과(View 클래스)
- 메뉴에 사용자 메뉴를 만든 후 관련 함수 생성.
- 코드삽입 CKDY013Doc* pDoc = GetDocument(); // Jitter() 함수 호출 //화면 갱신 |
클립보드 복사(Doc 클래스)
- 새로운 함수 생성 후 코드 삽입
- 매개변수 CxImage* pCopyImage HANDLE hDIB = m_pCopyImage->CopyToHandle(); // 클립보드 열기
- ID_EDIT_COPY 아이디 함수 재정의 후 코드 삽입 (View 클래스)
CKDY013Doc* pDoc = GetDocument(); // 클립보드에 복사하기 |
클립보드 붙이기(App 클래스)
- ID_EDIT_PASTE 아이디 함수 재정의 후 코드 삽입
POSITION pos = GetFirstDocTemplatePosition(); CKDY013Doc* pDoc = (CKDY013Doc*)pTemplate->OpenDocumentFile(NULL);
- ID_EDIT_PASTE 아이디의 Update함수 추가 후 코드 삽입 if(!IsClipboardFormatAvailable(CF_DIB)) |
컬러 공간 분석 (0) | 2009.03.23 |
---|---|
CxImage 제공 함수 (0) | 2009.03.18 |
라이브러리 함수 사용자 작성 (0) | 2009.03.18 |
기본 시작 함수 (0) | 2009.03.18 |
CxImage 소개 및 기본 설치 (0) | 2009.03.11 |
영상 파일을 읽어 오기 (Doc 클래스)
- CxImage* m_pImage 변수 정의
- 가상함수 정의창에서 OnOpenDocument() 함수 재정의 - 코드 삽입 m_pImage = new CxImage(); |
종료시 메모리 해제 (Doc 클래스)
- 가상함수 정의창에서 DeleteContents()함수 재정의
- 코드삽입 if(m_pImage) |
파일 열기 함수 (App 클래스)
- Class Wizard에서 ID_FILE_OPEN 선택후 OnFileOpen() 함수 재정의.
- 메시지 맵에서 ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) 주석처리 - 코드 삽입 char szFilter[] = "지원 영상처리 파일(*.bmp, *.jpg, *.gif, *.png, *.tif) |*.bmp; *.jpg; *.gif; *.png; *.tif|| "; if(fileDlg.DoModal() == IDOK) |
영상 출력하기 (View 클래스)
- OnDraw()함수에 코드 삽입
if(pDoc->m_pImage) pDoc->m_pImage->Draw(pDC->GetSafeHdc(), rect, 0); |
영상 크기에 따른 스크롤 지원하기 (View 클래스)
- OnInitialUpdate() 함수에 코드삽입
CKDY013Doc* pDoc = GetDocument(); CScrollView::OnInitialUpdate(); CSize sizeTotal; SetScrollSizes(MM_TEXT, sizeTotal); |
처음 실행시 나타나는 창 제거하기 (App 클래스)
- Instantance() 함수 ParseCommandLine(cmdInfo); 다음에 코드 삽입
CKDY013Doc* pDoc = GetDocument(); CScrollView::OnInitialUpdate(); CSize sizeTotal;
SetScrollSizes(MM_TEXT, sizeTotal); |
드래그 앤 드롭으로 영상 파일 열기 (APP 클래스)
- Instantance() 함수 if (!ProcessShellCommand(cmdInfo)) return FALSE; 다음에 코드 삽입
pMainFrame->DragAcceptFiles(); |
영상의 크기에 맞춰 보여주기 (Frame 클래스)
- 가상함수 정의창에서 ActivateeFrame 함수 선택
- Frame 클래스에 Doc헤더파일 추가 - 코드 삽입 CRect rect, rectClient; CxImage *m_pImage = ((CKDY013Doc *)GetActiveDocument())->m_pImage; if(m_pImage) SetWindowPos(NULL, 0, 0, width, height, SWP_NOMOVE | SWP_SHOWWINDOW); |
영상 저장(Doc 클래스)
- 가상함수 정의창에서 OnSaveDocument() 함수 재정의.
- 코드 삽입 int format_type = 0; // 소문자로 변환하기 MB_ICONSTOP); |
컬러 공간 분석 (0) | 2009.03.23 |
---|---|
CxImage 제공 함수 (0) | 2009.03.18 |
라이브러리 함수 사용자 작성 (0) | 2009.03.18 |
CxImage 라이브러리 함수 (0) | 2009.03.18 |
CxImage 소개 및 기본 설치 (0) | 2009.03.11 |
CxImage 소개
- Davide Pizzolato가 개발한 영상 처리 라이브러리.
- 2001년도 코드 프로젝에서 시작하여 오픈소스로 성장.
- 영상 읽기, 저장, 보기, 영상 변환 등을 구현한 C++영상처리 클래스로 구성(API자체가 매우 간결하면서도 빠름).
- 플랫폼에 종속적이지 않고 무료입니다.
- TIFF, JPEG, PNG, ZLIB, J2K 오픈 라이브러리와 연계되어 있습니다.
CxImage 라이브러리 만들기(2009. 3. 11 기준)
1. http://www.xdp.it에서 최신 버전 다운
2. Bacth Build 합니다. (꼭 Bacth Build안해도 됩니다)
이렇게 하게 되면 CxImage에 필요한 라이브러리들이 모두 생성됩니다.
- mfc42u.lib 오류가 발생한다면 첨부파일을 다운받아 압축을 풀어서
C:\Program Files\Microsoft Visual Studio\VC98\Lib에 복사합니다.
3. CxImage 라이브러리 연동하기
- MFC 프로젝트를 생성합니다.
- 이 때 Base Class를 CScrollView 설정합니다. (매우 큰 영상을 불러 들일 경우에 일정한 크기의 창에서 스크롤 하기 위함)
- 프로젝트를 Build합니다
- 현재 생성된 프로젝트의 폴더에 include 폴더를 만든 후 CxImage폴더의 모든 헤더 파일을 복사합니다.
- 현재 프로젝트의 [Project Settings]에서 [C/C++]탭을 선택
- Category 부분을 Pre-processor로 선택
- Settings For 옆의 콤보 박스를 All Configurations로 지정
- 오른쪽 화면 중앙 부분에 있는 Additions include directories 밑의 입력창에 ./include 입력
- Stdafx.h파일에 #include "xImage.h" 작성
- 현재 생성된 프로젝트의 폴더에 lib 폴더를 만듭니다.
- cximage600_full 폴더에서 *.lib를 검색한 후 다음의 라이브러리들을 현재 생성된 프로젝트의 lib폴더에 복사합니다.
- jasper.lib, jbig.lib, Jpeg.lib, libdcr.lib, mng.lib, png.lib, Tiff.lib, zlib.lib
- cximage.lib를 현재 프로젝트의 Debug 폴더에 복사합니다.
- [Project Settings] 창에서 [Link]탭을 선택
- Object/library modules 밑의 입력창에 다음과 같이 입력합니다.
- Dbug/cximage.lib ./lib/png.lib ./lib/jbig.lib ./lib/zlib.lib ./lib/mng.lib ./lib/jasper.lib ./lib/Jpeg.lib ./lib/Tiff.lib ./lib/libdcr.lib
- Release 모드에서는 Dbug/cximage.lib -> Release/cximage.lib
- 다시 재 빌드합니다.
- 오류가 없다면 성공!!
컬러 공간 분석 (0) | 2009.03.23 |
---|---|
CxImage 제공 함수 (0) | 2009.03.18 |
라이브러리 함수 사용자 작성 (0) | 2009.03.18 |
CxImage 라이브러리 함수 (0) | 2009.03.18 |
기본 시작 함수 (0) | 2009.03.18 |