영상처리 실습 #4
Histogram 연산
[ Histogram 대화상자 만들기 ]
Histogram 대화상자 만들기
Histogram 대화상자 만들기
Click
Histogram 대화상자 만들기
Histogram 대화상자 만들기
Drag
Histogram 대화상자 만들기
Drag
Click
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 대화상자 만들기
CxImage img,추가
unsigned int m_pHistogram[256];unsigned int m_nMaxHistogram;
Double Click
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 x, y; int i, nTemp;double sum, pixel_Number; /* variable used to increment
sum of hist */double histogram[256]; /* image histogram */double sum_hist[256]; /* sum of histogram elements */double scale_factor; /* 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