www.gusucode.com > images 案例代码 matlab源码程序 > images/PerformFlashNoflashDenoisingWithGuidedFilterExample.m

    %% Perform Flash/No-flash Denoising with Guided Filter
% This example shows how to use a guided filter to smooth an image,
% reducing noise, while preserving edges. The example uses two pictures of
% the same scene, one taken with a flash and the other without a flash. The
% version without a flash preserves colors but is noisy due to the
% low-light conditions. This example uses the version taken with a flash as
% the guidance image.
%%
% Read the image that you want to filter into the workspace. This example
% uses an image of some toys taken without a flash. Because of the low
% light conditions, the image contains a lot of noise.

% Copyright 2015 The MathWorks, Inc.

A = imread('toysnoflash.png');
figure;
imshow(A);
title('Input Image - Camera Flash Off')
%%
% Read the image that you want to use as the guidance image into the
% workspace. In this example, the guidance image is a picture of the same
% scene taken with a flash.
G = imread('toysflash.png');
figure;
imshow(G);
title('Guidance Image - Camera Flash On')
%%
% Perform the guided filtering operation. Using the |imguidedfilter| function,
% you can specify the size of the neighborhood used for filtering. The
% default is a 5-by-5 square. This example uses a 3-by-3 neighborhood.
% You can also specify the amount of smoothing performed by the filter.
% The value can be any positive number. One way to approach this is
% to use the default first and view the results. If you want less smoothing
% and more edge preservation, use a lower value for this parameter.
% For more smoothing, use a higher value. This example sets the value
% of the smoothing parameter.
nhoodSize = 3;
smoothValue  = 0.001*diff(getrangefromclass(G)).^2;
B = imguidedfilter(A, G, 'NeighborhoodSize',nhoodSize, 'DegreeOfSmoothing',smoothValue);
figure, imshow(B), title('Filtered Image')
%%
% Examine a close up of an area of the original image and compare it to the
% filtered image to see the effect of this edge-preserving smoothing
% filter.
figure; 
h1 = subplot(1,2,1); 
imshow(A), title('Region in Original Image'), axis on
h2 = subplot(1,2,2); 
imshow(B), title('Region in Filtered Image'), axis on
linkaxes([h1 h2])
xlim([520 660])
ylim([150 250])