Histogram 연산

Download Report

Transcript Histogram 연산

영상처리 실습 #4
Histogram 연산
[ Histogram 대화상자 만들기 ]
Histogram 대화상자 만들기
Histogram 대화상자 만들기
Click
Histogram 대화상자 만들기
Histogram 대화상자 만들기
Drag
Histogram 대화상자 만들기
Click
Drag
Histogram 대화상자 만들기
Click
Histogram 대화상자 만들기
Click
Histogram 대화상자 만들기
Histogram 대화상자 만들기
Histogram 대화상자 만들기
Histogram 대화상자 만들기
m_ctrlHistogram
Histogram 대화상자 만들기
Histogram 대화상자 만들기
Double Click
Histogram 대화상자 만들기
CxImage img,
unsigned int x, y;
m_nMaxHistogram = 0;
// 히스토그램 초기화
for (x=0; x<256; x++)
m_pHistogram[x] = 0;
// 히스토그램 구하기
for (y=0; y<img.GetHeight(); y++)
for (x=0; x<img.GetWidth(); x++)
m_pHistogram[img.GetPixelGray(x,y)]++;
// 히스토그램 최대값 구하기
for (x=0; x<256; x++)
if (m_pHistogram[x] > m_nMaxHistogram)
m_nMaxHistogram = m_pHistogram[x];
Histogram 대화상자 만들기
Double Click
CxImage img,
추가
unsigned int
unsigned int
m_pHistogram[256];
m_nMaxHistogram;
Histogram 대화상자 만들기
Histogram 대화상자 만들기
Histogram 대화상자 만들기
CRect win_rect;
// 0 점 설정 : 픽쳐컨트롤 왼쪽 아래
m_ctrlHistogram.GetWindowRect(&win_rect);
ScreenToClient(&win_rect);
dc.SetViewportOrg(win_rect.left, win_rect.bottom-1);
// 좌표 설정
dc.SetMapMode(MM_ANISOTROPIC);
dc.SetWindowExt(256, m_nMaxHistogram+1);
dc.SetViewportExt(win_rect.Width(), win_rect.Height());
// 히스토그램 그리기
for (int i=0; i<256; i++)
{
dc.MoveTo(i,0);
dc.LineTo(i, -m_pHistogram[i]);
}
Histogram 대화상자 만들기
Histogram 대화상자 만들기
Click
Histogram 대화상자 만들기
Histogram 대화상자 만들기
CDlgHistogram dlg(*m_pImage);
dlg.DoModal();
Histogram 대화상자 만들기
맨위로 스크롤
Histogram 대화상자 만들기
#include "DlgHistogram.h"
Histogram 대화상자 실행
영상처리 실습 #4
Histogram 연산
[ Histogram Equalization ]
Histogram Equalization
Histogram Equalization
Histogram Equalization
총 픽셀 수
Histogram Equalization
int
int
double
of hist */
double
double
double
x, y;
i, nTemp;
sum, pixel_Number;
/* variable used to increment sum
histogram[256];
sum_hist[256];
scale_factor;
/* image histogram */
/* sum of histogram elements */
/* normalized scale factor */
/* clear histogram to 0 */
for(i=0; i<256; i++)
histogram[i]=0;
/* calculate histogram */
for(x=0; x<m_pImage->GetHeight(); x++)
{
for(y=0; y<m_pImage->GetWidth(); y++)
{
histogram[m_pImage->GetPixelGray(x,y)]++;
}
}
Histogram Equalization
/* calculate normalized sum of hist */
sum = 0;
pixel_Number = m_pImage->GetHeight() * m_pImage->GetWidth();
scale_factor = 255.0 /pixel_Number;
for(i=0; i<256; i++)
{
sum += histogram[i];
sum_hist[i] = (sum * scale_factor) + 0.5;
}
/* transform image using new sum_hist as a LUT */
for(y=0; y<m_pImage->GetHeight(); y++)
{
for(x=0; x<m_pImage->GetWidth(); x++)
{
nTemp = sum_hist[m_pImage->GetPixelGray(x,y)];
m_pImage->SetPixelColor(x, y, RGB(nTemp,nTemp,nTemp));
}
}
UpdateAllViews(NULL);
Histogram Equalization 결과 영상
Histogram Equalization
원본 영상
결과 영상