[swift] 이미지 노이즈 제거하기

이미지 노이즈(noise)는 이미지 처리 작업에서 흔히 발생하는 문제 중 하나입니다. 노이즈가 있는 이미지는 선명도가 떨어지고 디테일이 흐려지는 등 시각적으로 좋지 않은 결과물을 가지게 됩니다.

이번에는 Swift 언어를 사용하여 이미지에서 노이즈를 제거하는 방법을 알아보겠습니다.

노이즈 제거 알고리즘

노이즈 제거에는 여러 알고리즘이 있지만, 여기서는 가우시안 필터(Gaussian filter)를 사용하는 방법을 사용할 것입니다. 가우시안 필터는 이미지의 각 픽셀 값을 가중치로 사용해 해당 픽셀 주변의 값을 평균화하여 노이즈를 제거하는 방법입니다.

이미지 노이즈 제거하기

아래의 코드는 Core Image 프레임워크를 사용하여 이미지의 노이즈를 제거하는 예시입니다.

import CoreImage

func denoiseImage(image: UIImage) -> UIImage? {
    guard let ciImage = CIImage(image: image) else {
        return nil
    }
    
    let noiseFilter = CIFilter(name: "CINoiseReduction")!
    noiseFilter.setValue(ciImage, forKey: kCIInputImageKey)
    noiseFilter.setValue(0.02, forKey: kCIInputNoiseLevelKey)
    noiseFilter.setValue(0.02, forKey: kCIInputSharpnessKey)
    
    guard let outputCIImage = noiseFilter.outputImage else {
        return nil
    }
    
    let context = CIContext(options: nil)
    guard let outputCGImage = context.createCGImage(outputCIImage, from: outputCIImage.extent) else {
        return nil
    }
    
    return UIImage(cgImage: outputCGImage)
}

// 사용 예시
let inputImage = UIImage(named: "inputImage.jpg")
if let denoisedImage = denoiseImage(image: inputImage) {
    // 노이즈가 제거된 이미지를 사용해 추가적인 작업을 진행할 수 있습니다.
}

위의 코드에서는 denoiseImage 함수를 사용하여 이미지의 노이즈를 제거합니다. 이 함수는 주어진 이미지를 CIImage로 변환하고, CINoiseReduction 필터를 사용하여 노이즈를 제거한 후, 결과 이미지를 UIImage로 변환합니다.

이제 denoiseImage 함수를 호출하여 노이즈가 제거된 이미지를 얻을 수 있습니다. 이후에는 원하는 대로 추가적인 작업을 수행할 수 있습니다.

결론

Swift를 사용하여 이미지의 노이즈를 제거하는 방법을 알아보았습니다. 노이즈는 시각적인 퀄리티를 떨어뜨리는 요소이므로, 이미지 처리 작업 시에 노이즈 제거는 중요한 부분입니다. 가우시안 필터를 사용하여 노이즈를 제거하는 방법을 익혀두면 유용하게 적용할 수 있을 것입니다.

참고: Apple - Core Image Guide