본문 바로가기
CodeSignal

Box Blur

by Doromi 2023. 12. 12.
728x90
반응형

주어진 이미지에 박스 블러 알고리즘을 적용하여 이미지를 흐리게 만드는 것입니다. 알고리즘은 다음과 같이 작동합니다:

각 픽셀 x의 값은 x를 중심으로 하는 3 × 3 사각형의 픽셀 값의 평균입니다. (x 자체를 포함합니다.)
x의 테두리에 있는 모든 픽셀은 결과에서 제거됩니다.
이를 통해 이미지를 흐리게 만듭니다.

예를 들어,

[[1, 1, 1],
 [1, 7, 1],
 [1, 1, 1]]

알고리즘을 적용하면 중앙의 픽셀 (1, 1)의 값은 주변 픽셀의 평균으로 계산됩니다. (1 + 1 + 1 + 1 + 7 + 1 + 1 + 1 + 1) / 9 = 15 / 9 = 1.66666 ≈ 1이 됩니다. 결과에서 테두리에 있는 픽셀이 제거되기 때문에 최종 결과는 [[1]]이 됩니다.

int[][] solution(int[][] image) {
    int[][] ret =new int[image.Length-2][];
    for(int i = 0;i<image.Length-2;i++){
        ret[i] = new int[image[0].Length-2];
        
        for(int j = 0;j<image[0].Length-2;j++){
            double sum = (image[i][j]+image[i+1][j]+image[i+2][j]+image[i][j+1]+image[i+1][j+1]+image[i+2][j+1]+image[i][j+2]+image[i+1][j+2]+image[i+2][j+2])/9;
            ret[i][j] = (int)Math.Floor(sum);
        }
    }
    
    return ret;    
}

for(int i = 0;i<image.Length-2;i++): 주어진 이미지의 행에 대한 루프. 이미지의 가장자리를 피하기 위해 image.Length-2까지만 루프를 돕니다.

ret[i] = new int[image[0].Length-2];: 결과 배열의 각 행을 초기화합니다. 가장자리 픽셀을 제외한 각 행의 길이는 image[0].Length-2입니다.

for(int j = 0;j<image[0].Length-2;j++): 주어진 이미지의 열에 대한 루프. 이미지의 가장자리를 피하기 위해 image[0].Length-2까지만 루프를 돕니다.

double sum = ...: 현재 중심 픽셀을 포함한 3 × 3 사각형의 픽셀 값의 합을 계산합니다.

ret[i][j] = (int)Math.Floor(sum);: 계산된 평균 값을 소수점 이하를 제거하고, 정수 형태로 변환하여 결과 배열에 저장합니다.

최종적으로, 함수는 흐린 이미지를 나타내는 새로운 2차원 배열 ret를 반환합니다.

728x90
반응형

'CodeSignal' 카테고리의 다른 글

evenDigitsOnly  (0) 2023.12.15
Minesweeper  (0) 2023.12.13
avoidObstacles  (0) 2023.12.12
arrayMaximalAdjacentDifference  (0) 2023.12.11
isIPv4Address  (0) 2023.12.10