locallapfilt
영상의 고속 국소 라플라시안 필터링
구문
설명
예제
국소 라플라시안 필터링을 사용하여 RGB 영상의 국소 대비 강화하기
RGB 영상 가져오기
A = imread('peppers.png');
0.4보다 작은 세부 묘사를 향상시키려면 필터의 파라미터를 설정하십시오.
sigma = 0.4; alpha = 0.5;
고속 국소 라플라시안 필터링 사용
B = locallapfilt(A, sigma, alpha);
원본 영상과 필터링된 영상을 나란히 표시합니다.
imshowpair(A, B, 'montage')
속도와 품질의 균형을 유지하면서 국소 대비 향상하기
국소 라플라시안 필터링은 많은 연산이 필요한 알고리즘입니다. locallapfilt
가 명암 범위를 'NumIntensityLevels
' 파라미터가 정의하는 여러 샘플로 이산화하여 알고리즘을 근사하면 처리 속도가 높아집니다. 이 파라미터는 속도와 품질의 균형을 맞추는 데 사용할 수 있습니다.
RGB 영상을 가져와 표시합니다.
A = imread('peppers.png'); figure imshow(A) title('Original Image')
세부 묘사를 다루려면 sigma
값을 사용하고, 대비를 늘려 영상의 국소 대비를 향상하려면 alpha
값을 사용하십시오.
sigma = 0.2; alpha = 0.3;
사용하는 샘플 수가 적을수록 실행 속도가 빨라지지만, 특히 평탄한 대비 영역에서 눈에 띄는 아티팩트가 생길 수 있습니다. 20개의 명암 수준만 사용하여 함수를 실행하고 시간을 측정합니다.
t_speed = timeit(@() locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 20))
t_speed = 0.0365
이제 영상을 처리하고 표시합니다.
B_speed = locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 20); figure imshow(B_speed) title(['Enhanced with 20 intensity levels in ' num2str(t_speed) ' sec'])
샘플 수가 많으면 처리 시간이 길어지지만, 더 보기 좋은 결과를 얻습니다. 100개의 명암 수준을 사용하여 함수를 실행하고 시간을 측정합니다.
t_quality = timeit(@() locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 100))
t_quality = 0.1822
100개의 명암 수준으로 영상을 처리하고 표시합니다.
B_quality = locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 100); figure imshow(B_quality) title(['Enhancement with 100 intensity levels in ' num2str(t_quality) ' sec'])
각자의 영상에서 명암 수준의 개수를 달리해 보십시오. 또한 대비를 평탄화해 보십시오(alpha
> 1). 최적의 명암 수준 개수는 영상마다 다르고 alpha
에 따라 달라진다는 것을 알 수 있습니다. 기본적으로 locallapfilt
는 발견적으로 속도와 품질의 균형을 맞추지만, 모든 영상에 대해 최상의 값을 예측할 수는 없습니다.
'ColorMode'를 사용하여 국소 색 대비 강화하기
컬러 영상을 가져와 그 크기를 줄여 표시합니다.
A = imread('car2.jpg'); A = imresize(A, 0.25); figure imshow(A) title('Original 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
imshow(B_separate)
title('Enhanced by boosting the local color contrast')
각 영상에 같은 양의 대비 향상이 적용되었지만, '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')
경계 선명도에 영향을 주지 않고 영상 세부 묘사 평활화하기
영상을 가져와 크기를 조정하고 표시합니다.
A = imread('car1.jpg'); A = imresize(A, 0.25); figure imshow(A) title('Original 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')
입력 인수
I
— 필터링할 영상
2차원 회색조 영상 | 2차원 RGB 영상
필터링할 영상으로, 2차원 회색조 영상 또는 2차원 RGB 영상으로 지정됩니다.
데이터형: single
| int8
| int16
| uint8
| uint16
sigma
— 경계의 진폭
음이 아닌 숫자
경계의 진폭으로, 음이 아닌 숫자로 지정됩니다. 정수형 영상 또는 [0, 1] 범위를 갖는 single형 영상의 경우 sigma
는 [0, 1] 범위에 속하는 값을 가져야 합니다. [a
, b
]와 같은 다른 범위를 갖는 single형 영상이라면 sigma
역시 [a
, b
] 범위에 속하는 값을 가져야 합니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
alpha
— 세부 묘사 평활화
양수
세부 묘사 평활화로, 양수로 지정됩니다. alpha
의 일반적인 값의 범위는 [0.01, 10]입니다.
값 | 설명 |
---|---|
alpha 가 1 보다 작음 | 입력 영상의 세부 묘사가 향상됩니다. 경계가 영향을 받거나 후광이 생기는 일 없이 영상의 국소 대비가 향상됩니다. |
alpha 가 1 보다 큼 | 선명한 경계를 유지하면서 입력 영상의 세부 묘사를 평활화합니다. |
alpha 가 1 과 같음 | 입력 영상의 세부 묘사가 바뀌지 않습니다. |
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
beta
— 동적 범위
1
(디폴트 값) | 음이 아닌 숫자
동적 범위로, 음이 아닌 숫자로 지정됩니다. 베타의 일반적인 값의 범위는 [0, 5]입니다. beta
는 A
의 동적 범위에 영향을 미칩니다.
값 | 설명 |
---|---|
beta 가 1 보다 작음 | 영상에서 경계의 진폭을 줄입니다. 세부 묘사에 영향을 주지 않으면서 동적 범위를 줄입니다. |
beta 가 1 보다 큼 | 영상의 동적 범위를 확장합니다. |
beta 가 1 과 같음 | 영상의 동적 범위가 바뀌지 않습니다. 이는 디폴트 값입니다. |
데이터형: 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")
는 각 색 채널을 개별적으로 필터링합니다.
ColorMode
— RGB 영상을 필터링하는 데 사용되는 방법
"luminance"
(디폴트 값) | "separate"
RGB 영상을 필터링하는 데 사용되는 방법으로, 다음 값 중 하나로 지정됩니다. 이 인수는 회색조 영상에 아무런 영향을 주지 않습니다.
값 | 설명 |
---|---|
"luminance" | locallapfilt 는 필터링하기 전에 입력 RGB 영상을 회색조로 변환하고, 필터링이 끝나면 다시 색을 적용합니다. 그러면 색의 변화 없이 입력 영상의 대비가 바뀝니다. |
"separate" | locallapfilt 는 각 색 채널을 개별적으로 필터링합니다. |
데이터형: char
| string
NumIntensityLevels
— 명암 샘플의 개수
"auto"
(디폴트 값) | 양의 정수
입력 영상의 동적 범위에 있는 명암 샘플의 개수로, "auto"
또는 양의 정수로 지정됩니다. 샘플 개수가 많을수록 정확한 국소 라플라시안 필터링에 가까운 결과가 나옵니다. 샘플 개수가 적으면 실행 속도가 빨라집니다. 일반적인 값의 범위는 [10, 100]
입니다. "auto"
로 설정되면 locallapfilt
는 필터의 다른 파라미터를 기반으로 품질과 속도의 균형을 위해 명암 수준의 개수를 자동으로 선택합니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| string
출력 인수
B
— 필터링된 영상
숫자형 배열
필터링된 영상으로, 입력 영상 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에 개발됨R2022b: 향상된 성능
locallapfilt
함수는 향상된 성능을 보여줍니다. 예를 들어, 이 코드는 이전 릴리스보다 약 6.8배 더 빠릅니다.
function locallapfiltTimingTest A = imread("peppers.png"); locallapfilt(A,0.4,0.5); end
대략적인 실행 시간은 다음과 같습니다.
R2022a: 0.254초
R2022b: 0.037초
이 코드는 timeit
함수를 사용하여 Windows® 10, Intel® Xeon® E5-2683 v4 CPU @ 2.10GHz 테스트 시스템(2개 프로세서)에서 시간이 측정되었습니다.
timeit(@locallapfiltTimingTest)
참고 항목
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)