주요 콘텐츠

imdiffusefilt

영상에 대한 비등방성 확산 필터링

설명

J = imdiffusefilt(I)는 영상 I에 비등방성 확산 필터링을 적용하고 결과를 J로 반환합니다.

예제

J = imdiffusefilt(I,Name=Value)는 이름-값 인수를 사용하여 비등방성 확산 알고리즘의 동작을 변경합니다.

예제

예제

모두 축소

영상을 작업 공간으로 읽어 들인 후 이를 표시합니다.

I = imread("cameraman.tif");
imshow(I)
title("Original Image")

Figure contains an axes object. The hidden axes object with title Original Image contains an object of type image.

비등방성 확산을 사용하여 영상을 평활화합니다. 비교를 위해, 가우스 블러 처리도 사용하여 영상을 평활화합니다. 텍스처가 있는 영역(예: 잔디)이 두 방법에서 모두 비슷한 정도로 평활화되도록 하기 위해, 가우스 평활화 커널의 표준편차 sigma를 조정합니다.

Idiffusion = imdiffusefilt(I);
sigma = 1.2;
Igaussian = imgaussfilt(I,sigma);

결과를 표시합니다. 비등방성 확산이 가우스 블러 처리보다 경계의 선명한 정도를 더 잘 유지합니다.

montage({Idiffusion,Igaussian})
title("Smoothing Using Anisotropic Diffusion (Left) vs. Gaussian Blurring (Right)")

Figure contains an axes object. The hidden axes object with title Smoothing Using Anisotropic Diffusion (Left) vs. Gaussian Blurring (Right) contains an object of type image.

회색조 영상을 읽어 들인 후 이 영상에 강한 가우스 잡음을 적용합니다. 잡음이 있는 영상을 표시합니다.

I = imread('pout.tif');
noisyImage = imnoise(I,'gaussian',0,0.005);
imshow(noisyImage)
title('Noisy Image')

Figure contains an axes object. The hidden axes object with title Noisy Image contains an object of type image.

구조적 유사도 지수(SSIM)를 계산하여 잡음이 있는 영상의 품질을 측정합니다. SSIM의 값이 1에 가까울수록 영상이 잡음 없는 참조 영상에 더 잘 합치합니다.

n = ssim(I,noisyImage);
disp(['The SSIM value of the noisy image is ',num2str(n),'.'])
The SSIM value of the noisy image is 0.26556.

비등방성 확산을 사용하여 잡음을 줄입니다. 먼저, 비등방성 확산 필터에 디폴트 파라미터를 사용하고 결과를 표시합니다.

B = imdiffusefilt(noisyImage);
imshow(B)
title('Anisotropic Diffusion with Default Parameters')

Figure contains an axes object. The hidden axes object with title Anisotropic Diffusion with Default Parameters contains an object of type image.

nB = ssim(I,B);
disp(['The SSIM value using default anisotropic diffusion is ',num2str(nB),'.'])
The SSIM value using default anisotropic diffusion is 0.65665.

영상 품질이 여전히 잡음으로 인해 저하되므로, 필터를 미세 조정합니다. 영상이 고대비 경계보다는 넓은 균일 영역의 특징을 더 두드러지게 가지고 있으므로 2차 전도(quadratic conduction) 방법을 선택합니다. imdiffuseest 함수를 사용하여 최적 기울기 임계값과 반복 횟수를 추정합니다. 결과 영상을 표시합니다.

[gradThresh,numIter] = imdiffuseest(noisyImage,'ConductionMethod','quadratic');
C = imdiffusefilt(noisyImage,'ConductionMethod','quadratic', ...
    'GradientThreshold',gradThresh,'NumberOfIterations',numIter);
imshow(C)
title('Anisotropic Diffusion with Estimated Parameters')

Figure contains an axes object. The hidden axes object with title Anisotropic Diffusion with Estimated Parameters contains an object of type image.

nC = ssim(I,C);
disp(['The SSIM value using quadratic anisotropic diffusion is ',num2str(nC),'.'])
The SSIM value using quadratic anisotropic diffusion is 0.88135.

결과 영상에서 잡음이 덜 두드러집니다. SSIM 값이 1에 더 가까우므로 영상 품질이 개선되었음을 확인할 수 있습니다.

잡음이 있는 3차원 회색조 MRI 볼륨을 불러옵니다.

load mristack

비등방성 확산을 사용하여 볼륨에 대해 경계 인식 잡음 감소를 수행합니다. 뇌와 같이 대비가 낮은 영상이 과도하게 평활화되는 것을 방지하기 위해 반복 횟수를 디폴트 값인 5보다 줄입니다. 그 대신 제거되는 잡음은 줄어듭니다.

diffusedImage = imdiffusefilt(mristack,'NumberOfIterations',3);

잡음이 있는 영상과 필터링된 영상을 자세히 비교하기 위해 두 영상의 10번째 슬라이스를 표시합니다.

imshowpair(mristack(:,:,10),diffusedImage(:,:,10),'montage')
title('Noisy Image (Left) vs. Anisotropic-Diffusion-Filtered Image (Right)')

Figure contains an axes object. The hidden axes object with title Noisy Image (Left) vs. Anisotropic-Diffusion-Filtered Image (Right) contains an object of type image.

해당 볼륨의 모든 슬라이스의 평균 NIQE(Natural Image Quality Evaluator) 점수를 계산합니다. NIQE 점수는 참조 영상 없이 영상 품질에 대한 정량적 측정값을 제공합니다. NIQE 점수가 낮을수록 지각 영상 품질이 높습니다.

nframes = size(mristack,3);
m = 0;
d = 0;
for i = 1:nframes
    m = m + niqe(mristack(:,:,i));
    d = d + niqe(diffusedImage(:,:,i));
end
mAvg = m/nframes;
dAvg = d/nframes;
disp(['The NIQE score of the noisy volume is ',num2str(mAvg),'.'])
The NIQE score of the noisy volume is 5.7794.
disp(['The NIQE score using anisotropic diffusion is ',num2str(dAvg),'.'])
The NIQE score using anisotropic diffusion is 4.1391.

NIQE 점수가 필터링된 영상에서 잡음이 줄어든 것을 시각적으로 관찰한 것과 일치합니다.

입력 인수

모두 축소

필터링할 영상으로, 크기가 m×n인 2차원 회색조 영상 또는 m×n×k인 3차원 회색조 볼륨으로 지정됩니다.

참고

비등방성 확산 필터링을 컬러 영상에 적용하려면 각 색 채널에 개별적으로 imdiffusefilt를 사용하십시오.

데이터형: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

이름-값 인수

모두 축소

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

예: imdiffusefilt(I,NumberOfIterations=4,Connectivity="minimal")은 반복 횟수를 4회로 하고 최소 연결성을 사용하여 영상 I에 대해 비등방성 확산을 수행합니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: imdiffusefilt(I,"NumberOfIterations",4,"Connectivity","minimal")은 반복 횟수를 4회로 하고 최소 연결성을 사용하여 영상 I에 대해 비등방성 확산을 수행합니다.

기울기 임계값으로, 숫자형 스칼라 또는 길이가 NumberOfIterations인 숫자형 벡터로 지정됩니다. GradientThreshold의 값에 따라 기울기 값이 실제 경계로 분류되거나 잡음으로 분류되어 전도(conduction) 과정을 제어합니다. GradientThreshold의 값을 높이면 영상이 더 평활화됩니다. 디폴트 값은 영상의 동적 범위의 10%입니다. imdiffuseest 함수를 사용하여 GradientThreshold의 적절한 값을 추정할 수 있습니다.

확산 과정에서 사용할 반복 횟수로, 양의 정수로 지정됩니다. imdiffuseest 함수를 사용하여 NumberOfIterations의 적절한 값을 추정할 수 있습니다.

픽셀과 그 이웃 픽셀의 연결성으로, 다음 값 중 하나로 지정됩니다.

  • "maximal" — 2차원 영상의 경우 최근접이웃 픽셀 8개, 3차원 영상의 경우 최근접이웃 픽셀 26개를 고려합니다.

  • "minimal" — 2차원 영상의 경우 최근접이웃 픽셀 4개, 3차원 영상의 경우 최근접이웃 픽셀 6개를 고려합니다.

전도 방법으로, "exponential" 또는 "quadratic"으로 지정됩니다. 지수 확산 방법은 저대비 경계보다 고대비 경계에 더 효과적입니다. 2차 확산 방법은 작은 영역보다 넓은 영역에 더 효과적입니다.

출력 인수

모두 축소

확산 필터링이 적용된 영상으로, 입력 영상 I와 크기 및 데이터형이 같은 숫자형 배열로 반환됩니다.

참고 문헌

[1] Perona, P., and J. Malik. "Scale-space and edge detection using anisotropic diffusion." IEEE® Transactions on Pattern Analysis and Machine Intelligence. Vol. 12, No. 7, July 1990, pp. 629–639.

[2] Gerig, G., O. Kubler, R. Kikinis, and F. A. Jolesz. "Nonlinear anisotropic filtering of MRI data." IEEE Transactions on Medical Imaging. Vol. 11, No. 2, June 1992, pp. 221–232.

확장 기능

모두 확장

버전 내역

R2018a에 개발됨

모두 확장

참고 항목

| | | | | | (Medical Imaging Toolbox)