[컴퓨터 비젼] - MFC/ openCV /히스토그램을 이용한 영상 이진화 처리
히스토그램 출력
1. 전체 화면을 255(흰색)로 초기화
2. X축은 밝기 값으로 Y축은 히스토그램의 값으로 출력
3. 히스토그램의 크기만큼 0(검정색)으로 출력
for (i = 0 ; i < width ; i++ ){
int idx = i * w_ratio;
int value = Hist[idx] * h_ratio;
for (j = 0 ; j < value ; j++ )
m_OutImage[(height-j-1)*width + i] = 0;
자신이 지정한 임계 값보다 크면 255, 작으면 0으로 이진화
for(int i =0 ; i < height ; i++)
{
for(int j=0 ; j < width ; j++)
{
if(m_InImage[(i*width) + j] >= m_Threshold)
m_OutImage[(i*width) + j] = 255;
else
m_OutImage[(i*width) + j] = 0;
}
}
● Gonzalez 알고리즘
밝기 값의 최소와 최대 값의 평균을 초기 임계 값으로 지정
while(Diff >= 1 )
{
// 그룹 1에 속한 화소 집합의 평균계산
int nSum = 0, nCnt = 0; // nSum: 그룹 1에 속하는 전체 화소 밝기값
// nCnt: 그룹 1의 전체 화소수
for (int i = 0 ; i < T ; i++ ){
nSum += hist[i] * i;
nCnt += hist[i];
}
double Mu_1 = (double)(nSum/nCnt); // 그룹 1의 밝기값 평균
// 그룹 2에 속한 화소 집합의 평균계산
nSum = 0, nCnt = 0; // nSum: 그룹 2에 속하는 전체 화소 밝기값,
// nCnt: 그룹 2의 전체 화소수
for (int i = T ; i < 256 ; i++ )
{
nSum += hist[i] * i;
nCnt += hist[ i ];
}
double Mu_2 = (double)(nSum/nCnt); // 그룹 2의 밝기값 평균
// 두 화소 그룹의 밝기값 평균을 이용한 임계값 결정
int T_Last = (int)((Mu_1 + Mu_2)/2);
Diff = abs(T-T_Last ); // 새롭게 계산된 임계값과 이전의 임계값과의 차이계산
T = T_Last;
}
m_Threshold = T; // 최종 Gonzalez 임계 값 결정
● Otsu 알고리즘
그룹을 두 개로 나누어 각각의 그룹의 밝기 값을 구한다. 밝기 값을 누적시킨 다음 전체 화소수로 나누어 전체 밝기 값에 대한 평균을 계산한다.
for(int k = temp_threshold-3 ; k <= temp_threshold+3 ; k++){
W1 = H_cdf[k]/N; // 그룹 1의 확률
W2 = 1. - W1; // 그룹 2의 확률
Mu_1 = H_m[k]/H_cdf[k]; // 그룹 1의 밝기값 평균
Mu_2 = (H_m[L-1] - H_m[k])/(N-H_cdf[k]); // 그룹 2의 밝기값 평균
Sigma_B = W1*(Mu_1 - Mu_T)*(Mu_1 - Mu_T) +
W2*(Mu_2 - Mu_T)*(Mu_2 - Mu_T);
if(Sigma_B > Sigma_Bmax){
Sigma_Bmax = Sigma_B;
m_Threshold = k;
● open cv에서 threshold()함수를 사용하여 이진화
Mat src = imread("lena.bmp", IMREAD_GRAYSCALE);
Mat dst = src.clone(); // 영상처리 후 결과영상
threshold(src, dst, thresh, maxValue, THRESH_BINARY);
'끄적끄적_공부' 카테고리의 다른 글
[컴퓨터활용능력1급] - 실기 시험 / 시험 후기 (0) | 2020.05.25 |
---|---|
[컴퓨터 비전] - 가우시안 함수(Gaussian)를 미분한 마스크를 통한 에지검출 (1) | 2020.04.17 |
도메인 이름을 이용해 IP주소 받기 (2) | 2020.04.14 |
[리눅스 환경 설정] - visual studio code/echo (6) | 2020.04.13 |
[컴퓨터 비젼] - openCV/MFC를 이용한 영상신호처리 (4) | 2020.03.30 |