Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear all;
- close all;
- calculate_psnr=@(f,g) 10*log10(1/mean2((f-g).^2));
- original = im2double(imread('cameraman.tif'));
- degraded = im2double(imread('degraded.tif'));
- degraded_freq = fftshift(fft2(degraded));
- figure;
- subplot(1,4,1);
- imshow(original);
- title('original');
- subplot(1,4,2);
- imshow(degraded);
- title('degraded');
- % Estimate the noise variance as the variance of a flat region
- %degraded_flat = imcrop(degraded, getrect());
- %noise_variance = var(degraded_flat(:))
- noise_variance = 0.0101
- % Lee filter
- local_mean = colfilt(degraded,[5,5],'sliding',@mean);
- local_var = colfilt(degraded,[5,5],'sliding',@var);
- K = (local_var-noise_variance)./local_var;
- lee_filtered = K.*degraded + (1-K).*local_mean;
- lee_filtered_psnr = calculate_psnr(original,lee_filtered)
- subplot(1,4,3);
- imshow(lee_filtered);
- title('Lee filtered, var=0.0101');
- % Gaussian low pass filter stddev=30
- [h, w] = size(degraded);
- lp_gauss = fspecial('gaussian', [h, w], 30);
- lp_gauss = lp_gauss./max(lp_gauss(:));
- lp_gauss_filtered = ifft2(ifftshift(degraded_freq.*lp_gauss));
- lp_gauss_filtered_psnr = calculate_psnr(original,lp_gauss_filtered)
- subplot(1,4,4);
- imshow(abs(lp_gauss_filtered));
- title('Low pass (stddev=30) filtered');
- % Lee filter, lower variance
- K = (local_var-0.001)./local_var;
- lee_filtered_lowvar = K.*degraded + (1-K).*local_mean;
- lee_filtered_lowvar_psnr = calculate_psnr(original,lee_filtered_lowvar)
- % Lee filter, higher variance
- K = (local_var-0.02)./local_var;
- lee_filtered_highvar = K.*degraded + (1-K).*local_mean;
- lee_filtered_highvar_psnr = calculate_psnr(original,lee_filtered_highvar)
- figure;
- subplot(1,4,1);
- imshow(degraded);
- title('degraded');
- subplot(1,4,2);
- imshow(lee_filtered);
- title('Lee filtered, var=0.0101');
- subplot(1,4,3);
- imshow(lee_filtered_lowvar);
- title('Lee filtered, var=0.001');
- subplot(1,4,4);
- imshow(lee_filtered_highvar);
- title('Lee filtered, var=0.02');
- % Vary matrix size
- K = (local_var-noise_variance)./local_var;
- local_mean = colfilt(degraded,[3,3],'sliding',@mean);
- local_var = colfilt(degraded,[3,3],'sliding',@var);
- lee_filtered_3x3 = K.*degraded + (1-K).*local_mean;
- lee_filtered_3x3_psnr = calculate_psnr(original,lee_filtered_3x3)
- local_mean = colfilt(degraded,[7,7],'sliding',@mean);
- local_var = colfilt(degraded,[7,7],'sliding',@var);
- lee_filtered_7x7 = K.*degraded + (1-K).*local_mean;
- lee_filtered_7x7_psnr = calculate_psnr(original,lee_filtered_7x7)
- figure;
- subplot(1,4,1);
- imshow(degraded);
- title('degraded');
- subplot(1,4,2);
- imshow(lee_filtered);
- title('Lee filtered, 5x5');
- subplot(1,4,3);
- imshow(lee_filtered_3x3);
- title('Lee filtered, 3x3');
- subplot(1,4,4);
- imshow(lee_filtered_7x7);
- title('Lee filtered, 7x7');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement