| 문제 grayscale 영상 이용 Gonzales & Woodsd algorithm을 이용하여 ,임계치 T를 구하고, 0 ~ 255의 binary 영상을 얻으시오 **반복문이지만, 지금은 1회로 마침 |
임계 값 자동 결정 방법 (Gonzalez-Woods)
1. 임계 값 T의 초기값을 추정한다. (제안된 추정 값은 영상에서 밝기의 최소값과 최대값 사이의 중간 점)
2. T로 이진화(binarization)한다. 그 결과는 밝기 값이 T보다 큰 화소들로 구성된 그룹(G1)과 밝기 값이 T보다 작은 화소들로 구성된 그룹(G2)의 화소들로 나누어진다
3. 그룹 역 G1과 G2에 대하여 화소들의 밝기의 평균 값(μ1, μ2)을 계산한다.
4. 연속적으로 다음과 같은 새로운 임계 값을 계산하다. T = (μ1 + μ2) / 2
- 연속적인 반복에서 임계 값의 변화가 미리 정의된 오차 ε보다 작을 때까지 단계 2에서 4까지 반복한다.
정답은 169
1. 코드
// Ouptut 저장 방법
BYTE pv;
int min = 1000;
int max = 0;
for (i = 0; i < m_Height; i++)
{
for (j = 0; j < m_Width; j++)
{
pv = *(YBuf + i * m_Width + j);
if (pv < min) {
min = pv;
}
if (pv > max) {
max = pv;
}
}
}
printf("min = %d, max = %d\n", min, max);
int T0;
T0 = (min + max) / 2;
printf("T0 = % d\n", T0);
//G1, G2로 나누어서 mul1, mul2 계산
//개수 총합
int mul1 = 0, mul2 = 0;
int count1 = 0, count2 = 0;
for (i = 0; i < m_Height; i++)
{
for (j = 0; j < m_Width; j++)
{
pv = *(YBuf + i * m_Width + j);
if (pv > T0) { //G1
mul1 += pv;
count1++;
}
if (pv < T0) { //G2
mul2 += pv;
count2++;;
}
}
}
mul1 = mul1 / count1;
mul2 = mul2 / count2;
int T1;
printf("G1 = %d, G2 = %d\n", mul1, mul2);
T1 = (mul1 + mul2) / 2;
printf("T1 = % d\n", T1);
2. 결과
min = 35, max = 240
T0 = 137
G1 = 165, G2 = 95
T1 = 130'영상처리' 카테고리의 다른 글
| [영상처리] Average Filter (0) | 2022.11.16 |
|---|---|
| [영상처리] 딥러닝에서 사용하는 미분식을 coding 해보자 (0) | 2022.11.15 |
| [영상처리] Y, Cb, Cr 영상인 3개의 bmp 파일을 얻어보자 (0) | 2022.11.06 |
| [영상처리] histogram 처리 (0) | 2022.11.06 |
| [영상처리] 이진화 영상 (0) | 2022.11.06 |