Main Content

locallapfilt

영상의 고속 국소 라플라시안 필터링

설명

예제

B = locallapfilt(I,sigma,alpha)는 경계를 인식하는 빠른 국소 라플라시안 필터로 회색조 또는 RGB 영상 I를 필터링합니다. sigmaI에 있는 경계의 진폭을 규정합니다. alpha는 세부 묘사의 평활화를 제어합니다.

B = locallapfilt(I,sigma,alpha,beta)A의 동적 범위를 beta를 사용하여 제어하며 영상을 필터링합니다.

예제

B = locallapfilt(___,Name=Value)는 이름-값 인수를 사용하여 필터의 고급 특성을 제어합니다.

예제

모두 축소

RGB 영상 가져오기

A = imread('peppers.png');

0.4보다 작은 세부 묘사를 향상시키려면 필터의 파라미터를 설정하십시오.

sigma = 0.4;
alpha = 0.5;

고속 국소 라플라시안 필터링 사용

B = locallapfilt(A, sigma, alpha);

원본 영상과 필터링된 영상을 나란히 표시합니다.

imshowpair(A, B, 'montage')

Figure contains an axes object. The axes object contains an object of type image.

국소 라플라시안 필터링은 많은 연산이 필요한 알고리즘입니다. locallapfilt가 명암 범위를 'NumIntensityLevels' 파라미터가 정의하는 여러 샘플로 이산화하여 알고리즘을 근사하면 처리 속도가 높아집니다. 이 파라미터는 속도와 품질의 균형을 맞추는 데 사용할 수 있습니다.

RGB 영상을 가져와 표시합니다.

A = imread('peppers.png');
figure
imshow(A)
title('Original Image')

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

세부 묘사를 다루려면 sigma 값을 사용하고, 대비를 늘려 영상의 국소 대비를 향상하려면 alpha 값을 사용하십시오.

sigma = 0.2;
alpha = 0.3;

사용하는 샘플 수가 적을수록 실행 속도가 빨라지지만, 특히 평탄한 대비 영역에서 눈에 띄는 아티팩트가 생길 수 있습니다. 20개의 명암 수준만 사용하여 함수를 실행하고 시간을 측정합니다.

t_speed = timeit(@() locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 20))  
t_speed = 0.0278

이제 영상을 처리하고 표시합니다.

B_speed = locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 20);
figure
imshow(B_speed)
title(['Enhanced with 20 intensity levels in ' num2str(t_speed) ' sec'])

Figure contains an axes object. The axes object with title Enhanced with 20 intensity levels in 0.027781 sec contains an object of type image.

샘플 수가 많으면 처리 시간이 길어지지만, 더 보기 좋은 결과를 얻습니다. 100개의 명암 수준을 사용하여 함수를 실행하고 시간을 측정합니다.

t_quality = timeit(@() locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 100))
t_quality = 0.1433

100개의 명암 수준으로 영상을 처리하고 표시합니다.

B_quality = locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 100);
figure
imshow(B_quality)
title(['Enhancement with 100 intensity levels in ' num2str(t_quality) ' sec'])

Figure contains an axes object. The axes object with title Enhancement with 100 intensity levels in 0.14331 sec contains an object of type image.

각자의 영상에서 명암 수준의 개수를 달리해 보십시오. 또한 대비를 평탄화해 보십시오(alpha > 1). 최적의 명암 수준 개수는 영상마다 다르고 alpha에 따라 달라진다는 것을 알 수 있습니다. 기본적으로 locallapfilt는 발견적으로 속도와 품질의 균형을 맞추지만, 모든 영상에 대해 최상의 값을 예측할 수는 없습니다.

컬러 영상을 가져와 그 크기를 줄여 표시합니다.

A = imread('car2.jpg');
A = imresize(A, 0.25);
figure
imshow(A)
title('Original Image')

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

정규화된 범위 0 ~ 1 중 0.3보다 작은 세부 묘사를 획기적으로 향상하도록 필터의 파라미터를 설정합니다.

sigma = 0.3;
alpha = 0.1;

색 필터링의 2가지 모드를 비교해 보겠습니다. 명암을 필터링하고 각 색 채널을 개별적으로 필터링하는 방식으로 영상을 처리합니다.

B_luminance = locallapfilt(A, sigma, alpha);
B_separate  = locallapfilt(A, sigma, alpha, 'ColorMode', 'separate');

필터링된 영상을 표시합니다.

figure
imshow(B_luminance)
title('Enhanced by boosting the local luminance contrast')

Figure contains an axes object. The axes object with title Enhanced by boosting the local luminance contrast contains an object of type image.

figure
imshow(B_separate)
title('Enhanced by boosting the local color contrast')

Figure contains an axes object. The axes object with title Enhanced by boosting the local color contrast contains an object of type image.

각 영상에 같은 양의 대비 향상이 적용되었지만, 'ColorMode'를 'separate'로 설정한 결과에서 색의 채도가 더 높아졌습니다.

영상을 가져옵니다. 더 손쉽게 인공 잡음을 추가할 수 있도록 영상을 부동소수점으로 변환합니다.

A = imread('pout.tif');
A = im2single(A);

평균 0, 분산 0.001을 갖는 가우스 잡음을 추가합니다.

A_noisy = imnoise(A, 'gaussian', 0, 0.001);
psnr_noisy = psnr(A_noisy, A);
fprintf('The peak signal-to-noise ratio of the noisy image is %0.4f\n', psnr_noisy);        
The peak signal-to-noise ratio of the noisy image is 30.0234

평활화할 세부 묘사의 진폭을 설정한 다음 적용할 평활화의 양을 설정합니다.

sigma = 0.1;
alpha = 4.0;

경계 인식 필터를 적용합니다.

B = locallapfilt(A_noisy, sigma, alpha);
psnr_denoised = psnr(B, A);
fprintf('The peak signal-to-noise ratio of the denoised image is %0.4f\n', psnr_denoised);
The peak signal-to-noise ratio of the denoised image is 32.3362

영상의 PSNR 향상에 주목하십시오.

3개 영상 모두 나란히 표시합니다. 세부 묘사가 평활화되고 경계에서의 뚜렷한 명암 변화는 그대로 유지됩니다.

figure
subplot(1,3,1), imshow(A), title('Original')
subplot(1,3,2), imshow(A_noisy), title('Noisy')
subplot(1,3,3), imshow(B), title('Denoised')

Figure contains 3 axes objects. Axes object 1 with title Original contains an object of type image. Axes object 2 with title Noisy contains an object of type image. Axes object 3 with title Denoised contains an object of type image.

영상을 가져와 크기를 조정하고 표시합니다.

A = imread('car1.jpg');
A = imresize(A, 0.25);
figure
imshow(A)
title('Original Image')

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

자동차가 더럽고 온갖 자국이 가득합니다. 본체의 먼지와 자국을 지워보겠습니다. 평활화할 세부 묘사의 진폭을 설정하고 많은 양의 평활화를 적용하도록 설정합니다.

sigma = 0.2;
alpha = 5.0;

1보다 큰 alpha로 평활화하면서 필터는 작은 명암 수준을 사용하여 우수한 품질의 결과를 생성합니다. 더 빨리 영상을 처리하려면 작은 명암 수준을 설정하십시오.

numLevels = 16;

필터를 적용합니다.

B = locallapfilt(A, sigma, alpha, 'NumIntensityLevels', numLevels);

"깔끔한" 차를 표시합니다.

figure
imshow(B)
title('After smoothing details')

Figure contains an axes object. The axes object with title After smoothing details contains an object of type image.

입력 인수

모두 축소

필터링할 영상으로, 2차원 회색조 영상 또는 2차원 RGB 영상으로 지정됩니다.

데이터형: single | int8 | int16 | uint8 | uint16

경계의 진폭으로, 음이 아닌 숫자로 지정됩니다. 정수형 영상 또는 [0, 1] 범위를 갖는 single형 영상의 경우 sigma는 [0, 1] 범위에 속하는 값을 가져야 합니다. [a, b]와 같은 다른 범위를 갖는 single형 영상이라면 sigma 역시 [a, b] 범위에 속하는 값을 가져야 합니다.

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

세부 묘사 평활화로, 양수로 지정됩니다. alpha의 일반적인 값의 범위는 [0.01, 10]입니다.

설명
alpha1보다 작음입력 영상의 세부 묘사가 향상됩니다. 경계가 영향을 받거나 후광이 생기는 일 없이 영상의 국소 대비가 향상됩니다.
alpha1보다 큼선명한 경계를 유지하면서 입력 영상의 세부 묘사를 평활화합니다.
alpha1과 같음입력 영상의 세부 묘사가 바뀌지 않습니다.

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

동적 범위로, 음이 아닌 숫자로 지정됩니다. 베타의 일반적인 값의 범위는 [0, 5]입니다. betaA의 동적 범위에 영향을 미칩니다.

설명
beta1보다 작음영상에서 경계의 진폭을 줄입니다. 세부 묘사에 영향을 주지 않으면서 동적 범위를 줄입니다.
beta1보다 큼영상의 동적 범위를 확장합니다.
beta1과 같음영상의 동적 범위가 바뀌지 않습니다. 이는 디폴트 값입니다.

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

이름-값 인수

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

예: B = locallapfilt(I,sigma,alpha,ColorMode="separate")는 각 색 채널을 개별적으로 필터링합니다.

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

예: B = locallapfilt(I,sigma,alpha,"ColorMode","separate")는 각 색 채널을 개별적으로 필터링합니다.

RGB 영상을 필터링하는 데 사용되는 방법으로, 다음 값 중 하나로 지정됩니다. 이 인수는 회색조 영상에 아무런 영향을 주지 않습니다.

설명
"luminance"locallapfilt는 필터링하기 전에 입력 RGB 영상을 회색조로 변환하고, 필터링이 끝나면 다시 색을 적용합니다. 그러면 색의 변화 없이 입력 영상의 대비가 바뀝니다.
"separate"locallapfilt는 각 색 채널을 개별적으로 필터링합니다.

데이터형: char | string

입력 영상의 동적 범위에 있는 명암 샘플의 개수로, "auto" 또는 양의 정수로 지정됩니다. 샘플 개수가 많을수록 정확한 국소 라플라시안 필터링에 가까운 결과가 나옵니다. 샘플 개수가 적으면 실행 속도가 빨라집니다. 일반적인 값의 범위는 [10, 100]입니다. "auto"로 설정되면 locallapfilt는 필터의 다른 파라미터를 기반으로 품질과 속도의 균형을 위해 명암 수준의 개수를 자동으로 선택합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

출력 인수

모두 축소

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

참고 문헌

[1] Paris, Sylvain, Samuel W. Hasinoff, and Jan Kautz. Local Laplacian filters: edge-aware image processing with a Laplacian pyramid, ACM Trans. Graph. 30.4 (2011): 68.

[2] Aubry, Mathieu, et al. Fast local laplacian filters: Theory and applications. ACM Transactions on Graphics (TOG) 33.5 (2014): 167.

버전 내역

R2016b에 개발됨

모두 확장