주어진 영상에 salt-and-pepper impulse noise를 추가하는 코드다. 잡음을 추가할 픽셀의 개수 주어진 잡음 발생 확률 $p$이므로 $N=p\times(\text{영상의 픽셀 수})$로 계산한다. 영상 내에서 임의의 위치 $(x,y)$를 선택하여 해당 픽셀 값을 최대 밝기값 $(\texttt{imax})$과 최소 밝기값 $\texttt{imin})$으로 번갈아가며 변경한다. 즉, 절반의 픽셀은 흰색(salt), 나머지 절반은 검은색(pepper)으로 바뀌므로 salt-and-pepper noise가 생성된다. Salt와 pepper의 발생 비율은 1:1이 되도록 구현했다.

int AddImpulseNoise(CRaster& raster, double p, int imax, int imin, CRaster& noised) {
srand(unsigned(time(NULL)));
CSize sz = raster.GetSize();
p = max(min(p, 1),0); //noise probability;
int np = int(p * sz.cx * sz.cy);
// clone;
noised = raster;
imax = max(min(255, imax), 0); //maximum impulse value;
imin = min(max(0, imin), 255); //minimum impulse value;
for (int count = 0, turn = 0; count < np; count++) {
//x in [0, sz.cx - 1];
int x = int((sz.cx - 1) * double(rand()) / RAND_MAX);
//y in [0, sz.cy - 1];
int y = int((sz.cy - 1) * double(rand()) / RAND_MAX);
if (turn == 0) {
turn = 1;
noised.SetPixel(x, y, imax);
} else {
turn = 0;
noised.SetPixel(x, y, imin);
}
}
return 1;
}'Image Recognition > Fundamental' 카테고리의 다른 글
| Bilateral Filter (0) | 2024.02.18 |
|---|---|
| 파라미터 공간에서 본 최소자승 Fitting (0) | 2023.05.21 |
| Canny Edge: Non-maximal suppression (0) | 2023.01.11 |
| Statistical Region Merging (0) | 2022.06.11 |
| Moment-preserving Thresholding (0) | 2022.05.29 |


