영상 기울기에서 잡음 줄이기
이 예제는 계산 중인 영상 기울기와 연관된 잡음을 줄이는 방법을 보여줍니다. 영상 기울기는 영상 내 흥미로운 특징을 강조 표시하는 데 사용되며, 경계/코너 검출 같은 다양한 특징 검출 알고리즘에 활용됩니다. 정확한 특징을 검출하려면 기울기 계산에서 잡음을 반드시 줄여야 합니다.
영상을 작업 공간으로 읽어 들인 후 회색조로 변환합니다.
originalImage = imread("yellowlily.jpg");
originalImage = im2gray(originalImage);
imshow(originalImage)
이 예제에서는 잡음을 시뮬레이션하기 위해 가우스 잡음을 영상에 조금 추가합니다.
noisyImage = imnoise(originalImage,"gaussian");
imshow(noisyImage)
imgradient 함수와 imgradientxy 함수를 사용하여 기울기 크기를 계산합니다. imgradient는 기울기 크기와 방향을 구하고, imgradientxy는 영상의 방향 기울기를 구합니다.
sobelGradient = imgradient(noisyImage);
imshow(sobelGradient,[])
title("Sobel Gradient Magnitude")
기울기 크기 영상을 보면 영상 기울기에 매우 잡음이 많다는 것이 분명히 드러납니다. 잡음의 영향은 기울기 계산 전에 평활화를 수행하여 최소화할 수 있습니다. imgradient는 Sobel 기울기 연산자를 사용하여 적은 양의 잡음의 영향을 최소하는 기능을 이미 제공합니다. Sobel 기울기 연산자는 아래에 표시된 것처럼 3×3 필터입니다. 이 연산자는 fspecial 함수를 사용하여 생성할 수 있습니다.
hy = -fspecial("sobel")hy = 3×3
-1 -2 -1
0 0 0
1 2 1
hx = hy'
hx = 3×3
-1 0 1
-2 0 2
-1 0 1
hy 필터는 가로 방향으로 평활화하는 동안 세로 방향을 따라 기울기를 계산합니다. hx는 세로 방향으로 평활화하고 가로 방향을 따라 기울기를 계산합니다. "Prewitt" 및 "Roberts" 방법 옵션도 이 기능을 제공합니다.
Sobel, Roberts 또는 Prewitt 기울기 연산자를 사용하더라도 영상 기울기에 잡음이 심할 수 있습니다. 이를 해결하려면 영상 기울기를 계산하기 전에 가우스 평활화 필터를 사용하여 영상을 평활화하십시오. imgaussfilt 함수를 사용하여 영상을 평활화합니다. 가우스 필터의 표준편차에 따라 평활화 범위가 달라집니다. 가우스 필터링을 통해 평활화가 처리되므로, 중심 또는 중간 차분 기울기 연산자를 사용할 수 있습니다.
sigma = 2; smoothImage = imgaussfilt(noisyImage,sigma); smoothGradient = imgradient(smoothImage,"CentralDifference"); imshow(smoothGradient,[]) title("Smoothed Gradient Magnitude")

참고 항목
imnoise | imgradient | imgaussfilt | fspecial