์์์ฒ๋ฆฌ
- ์ฃผ์ด์ง ๋ชฉ์ ์ ๋ฌ์ฑํ๊ธฐ ์ํด ์๋ ์์์ ์๋ก์ด ์์์ผ๋ก ๋ณํ
- ์ปดํจํฐ ๋น์ ์ ์ ์ฒ๋ฆฌ ๊ณผ์
์ํ๋ง๊ณผ ์์ํ
- 2์ฐจ์ ์์ ๊ณต๊ฐ์ MxN์ผ๋ก ์ํ๋ง (MxN์ ํด์๋๋ผ๊ณ ๋ถ๋ฅธ๋ค)
- ๋ช ์์ L๋จ๊ณ๋ก ์์ํ (L์ ๋ช ์ ๋จ๊ณ๋ผ๊ณ ํ๋ค. ์ฆ, ๋ช ์์ 0๋ถํฐ L-1์ ๋ถํฌ๋์ด ์๋ค. )
์์ ์ฌ์ง์ M์ด 12, N์ด 12, ๊ทธ๋ฆฌ๊ณ ๋ช ์ ๋จ๊ณ L์ 10์ธ ๊ฒฝ์ฐ์ด๋ค.
(c) ๋์งํธ ์์์ ๋ณด๋ฉด, ๋ช ์์ด 0๋ถํฐ 9๊น์ง ๋ถํฌ๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ช ์์ด ๊ฐ์ฅ ๋์ ๋ถ๋ถ์ 9์ด๊ณ ํฐ ๋ฐฐ๊ฒฝ์ 0์ด๋ค.
์์ ์ขํ๊ณ
- ํ์ ์์น๋ x = (j, i) ๋๋ x = (y, x)๋ก ํ๊ธฐํ๋ค.
- ์์์ f(x) ๋๋ f(j, i), 0<=j<=M-1, 0<=i<=N-1๋ก ํ๊ธฐํ๋ค.
- ์ปฌ๋ฌ ์์์ fr(x), fg(x), fb(x)์ ์ธ ์ฑ๋๋ก ๊ตฌ์ฑํ๋ค.
ํ์คํ ๊ทธ๋จ
- [0, L-1] ์ฌ์ด์ ๋ช ์๊ฐ ๊ฐ๊ฐ์ด ์์์ ๋ช ๋ฒ ๋ํ๋๋์ง ํ์ํ๋ค.
- ํ์คํ ๊ทธ๋จ h์ ์ ๊ทํ ํ์คํ ๊ทธ๋จ์ ๊ตฌํ๋ ๊ณต์๊ณผ ์๊ณ ๋ฆฌ์ฆ
๋ช ์ ์์์์ ํ์คํ ๊ทธ๋จ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ
ํ์คํ ๊ทธ๋จ๊ณผ ์ ๊ทํ ํ์คํ ๊ทธ๋จ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ฝ๋
//ํ์คํ ๊ทธ๋จ ์ด๊ธฐํ
for (l = 0 to L-1)
h(l) = 0;
for (j = 0 to M-1)
for (i = 0 to N-1) //f์ ํ์ (j, i)๊ฐ๊ฐ์ ๋ํด
h(f(j, i))++; //๋ช
์๊ฐ์ ํค๋นํ๋ ํ์คํ ๊ทธ๋จ ์นธ์ 1๋งํผ ์ฆ๊ฐ
//ํ์คํ ๊ทธ๋จ ์ ๊ทํ
for (l = 0 to L-1)
h'(l) = h(l) / (M*N);
#include <stdio.h>
#include <windows.h>
#pragma warning(disable:4996)
//์์์ ํ์คํ ๊ทธ๋จ์ ๊ตฌํ๋ ํจ์
void IppHistogram(IppByteImage& img, float histo[256])
{
int size = img.GetSize();
BYTE* p = img.GetPixels();
// ํ์คํ ๊ทธ๋จ ๊ณ์ฐ
int cnt[256];
memset(cnt, 0, sizeof(int) * 256);
for (int i = 0; i < size; i++)
cnt[p[i]]++;
// ํ์คํ ๊ทธ๋จ ์ ๊ทํ(histogram normalization)
for (int i = 0; i < 256; i++)
{
histo[i] = static_cast<float>(cnt[i]) / size; //histo[i] = histo[i] / (256*256)
}
}
int main() {
FILE *fp;
unsigned char Readbuf[256][256];
unsigned char Writebuf[256][256];
//์์ ์ฝ๊ธฐ //1826
fp = fopen("lena_graycsale.bmp", "rb");
for (int i = 0; i < 256; i++)
fread(Readbuf[i], 1, 256, fp);
fclose(fp);
//์์ ํธ์ง
for (int i = 0; i < 256; i++)
for (int j = 0; j < 256; j++)
Writebuf[j][i] = Readbuf[j][i];
//ํ์คํ ๊ทธ๋จ ์ ๊ทํ
for (int i = 0; i < 256; i++)
for(int j = 0; j < 256; j++)
histo[i][j] = histo[i][j] / (256 * 256)
//์์ ์ ์ฅ
fp= fopen("lena(BMP).raw", "wb");
for (int i = 0; i < 256; i++)
fwrite(Writebuf[i], 1, 256, fp);
fclose(fp);
return 0;
}
ํ์คํ ๊ทธ๋จ ํํํ
- ํ์คํ ๊ทธ๋จ์ ํํํ๊ฒ ๋ง๋ค์ด ์ฃผ๋ ์ฐ์ฐ์ด๋ค.
- ๋ช ์์ ๋์ ๋ฒ์๋ฅผ ํ์ฅํ์ฌ ์์์ ํ์ง์ ํฅ์์์ผ์ค๋ค.
- ๋์ ํ์คํ ๊ทธ๋จ์ ๋งคํ ํจ์๋ก ์ฌ์ฉํ๋ค.
- ์์์ ํํํํ๋ฉด ๋น๊ต์ ์ผ๋ก ๋์ ๋ฒ์๊ฐ ๋์ด์ง๋ ํน์ง์ด ์๋ค.
ํ์คํ ๊ทธ๋จ ํํํ ์์ ๋ฌธ์
ํํํ๋ฅผ ํ๋ฉด ๋์ ๋ฒ์๊ฐ ๋์ด์ง๋ฏ๋ก ํํํ๋ ๋ฌด์กฐ๊ฑด ์ข์๊ฐ? -> ์๋๋ค.
์์ ๊ทธ๋ฆผ์ฒ๋ผ ํ์คํ ๊ทธ๋จ ํํํ๋ฅผ ์ ์ฉํ์ ๋ ์๊ฐ์ ์ผ๋ก ๋๋์ด ๋๋น ์ง ๊ฒฝ์ฐ๋ ์๋ค.
์์์ฒ๋ฆฌ ์ฐ์ฐ์ ๋ถ๋ณ๋ ฅ์ ๊ฐ์ง๊ณ ํ์ฉ ์ฌ๋ถ๋ฅผ ์ ๊ฒฐ์ ํด์ผ ํ๋ค.
ํ์คํ ๊ทธ๋จ ์ญํฌ์
- ํ์คํ ๊ทธ๋จ์ ๋งคํ ํจ์๋ก ์ฌ์ฉํ์ฌ, ํ์ ๊ฐ์ ์ ๋ขฐ๋ ๊ฐ์ผ๋ก ๋ณํ
- ์์์ ๊ฐ ํฝ์ ์ด ์ฃผ์ด์ง ํ์คํ ๊ทธ๋จ ๋ชจ๋ธ์ ์ผ๋ง๋ ์ผ์นํ๋์ง๋ฅผ ๊ฒ์ฌํ๋ ๋ฐฉ๋ฒ
- ์์์ ์์ ์์ญ์ ๊ฒ์ถํ ๋ ํจ๊ณผ์ ์ด๋ค.
ํ์คํ ๊ทธ๋จ ์ญํฌ์ ์๊ณ ๋ฆฌ์ฆ
H์ S์ฑ๋ ์์์ ์ ๊ทํ ๊ณต์์ ์ ์ฉํด์ ์ ๊ท ํ์คํ ๊ทธ๋จ์ ๋ง๋ ๋ค.
์ญํฌ์ ๊ณต์์ ์ ์ฉํ๋ค.
for (j = 0 to M-1)
for (i = 0 to N-1)
o(j, i) = h'r(quantize(gH(j, i), quantize(gS(j, i))); //์ญํฌ์
ํ์คํ ๊ทธ๋จ ์ญํฌ์ ๊ฒฐ๊ณผ
- ์ผ๊ตด ์์ญ์ ๋์ ์ ๋ขฐ๋ ๊ฐ, ์ ์์ญ๋ ๋์ ์ ๋ขฐ๋ ๊ฐ์ ๊ฐ์ง๋ค.
- ํ๊ณ : ๋น์ทํ ์ ๋ถํฌ๋ฅผ ๊ฐ์ง๋ ๋ค๋ฅธ ๋ฌผ์ฒด๋ฅผ ๊ตฌ๋ณํ์ง ๋ชปํ๋ค. ๊ฒ์ถ ๋์์ด ๊ฒจ๋ก ์ ๋ถํฌ๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
- ์ฅ์ : ๋ฐฐ๊ฒฝ์ ์กฐ์ ํ ์ ์๋ ์ํฉ์ ์ ํฉํ๋ค. ์ด๋๊ณผ ํ์ ์ ๋ถ๋ณํ๋ฉฐ ๊ฐ๋ฆผ์ ๊ฐ์ธํ๋ค.