Image Filtering Tutorial

CMSC 426: Image Processing [Spring 2016]

TA: Peratham Wiriyathammabhum (MyFirstName-AT-cs.umd.edu)

Contents

Load any image

%# this sample image is from Kullasatree Magazine June 2015.
%# http://iconosquare.com/p/996193116531919677_1512351217
I = imread('sample2.jpg');
I = rgb2gray(I);

Histogram equalization

%# convert to grayscale images
im = double(I);
%# plot
figure;
subplot(2,2,1);
imagesc(im);
colormap(gray);
title('the original image');

%# histogram plot
subplot(2,2,2);
imhist(I);
title('original histogram');
%# histogram equalization
%# http://www.mathworks.com/help/hdlcoder/examples/image-enhancement-by-histogram-equalization.html
he = histeq(I);

%# plot equalizaed image
subplot(2,2,3);
imagesc(he);
colormap(gray);
title('histogram equalized image');
%# plot new histogram
subplot(2,2,4);
imhist(he);
title('equalized histogram');

Threshold image

T = 128;
t = im;
t(im <= T) = 0;
t(im > T) = 1;

%# plot
figure;
subplot(1,2,1);
imagesc(im);
colormap(gray);
title('the original image');
subplot(1,2,2);
imagesc(t);
colormap(gray);
title('the thresholded image');

Smooth image

add noise

noise_type = 'salt & pepper'; % 'gaussian' or 'poisson' are also valid
noises = imnoise(im, noise_type, 0.02);
nim = im;
nim(noises == 0) = 0;

% smoothing parameter for gaussian filter
sigma = 1.5;
%# Create the gaussian filter with hsize = [w w] and sigma = sigma
%# where w = sigma * 6  + 1
w = sigma * 6 + 1;
G = fspecial('gaussian',[w w], sigma);
%# Filter it with border replication
o = imfilter(nim, G, 'replicate');

%# plot
figure;
subplot(1,2,1);
imagesc(nim);
colormap(gray);
title('the noisy image');
subplot(1,2,2);
imagesc(o);
colormap(gray);
title('the image after gaussian smoothing');

Median smoothing

add noise

noise_type = 'salt & pepper'; % 'gaussian' or 'poisson' are also valid
noises = imnoise(im, noise_type, 0.02);
nim = im;
nim(noises == 0) = 0;

% smoothing parameter for gaussian filter
m = medfilt2(nim, [3 3]);

%# plot
figure;
subplot(1,2,1);
imagesc(nim);
colormap(gray);
title('the noisy image');
subplot(1,2,2);
imagesc(m);
colormap(gray);
title('the image after median smoothing');

Sharpen image

%# for filters check out topics 17,4,5
G = [0 -1 0; -1 5 -1;0 -1 0];

%# Filter it with border replication
s = imfilter(im, G, 'replicate');

%# plot
figure;
subplot(1,2,1);
imagesc(im);
colormap(gray);
title('the original image');
subplot(1,2,2);
imagesc(s);
colormap(gray);
title('the sharpen image');

Diagonal prewitt on image

P = [0 1 1; -1 0 1;-1 -1 0];

%# Filter it with border replication
dp = imfilter(im, P, 'replicate');

%# plot
figure;
subplot(1,2,1);
imagesc(im);
colormap(gray);
title('the original image');
subplot(1,2,2);
imagesc(dp);
colormap(gray);
title('the diagonal prewitted image');

Horizontal Frei-Chen on color image

I = imread('sample2.jpg');
P = [-1 -sqrt(2) -1; 0 0 0;1 sqrt(2) 1];

%# Filter it with border replication
dp = imfilter(I, P, 'replicate');

%# plot
figure;
subplot(1,2,1);
imagesc(I);
title('the original image');
subplot(1,2,2);
imagesc(dp);
colormap(gray);
title('the Horizontal Frei-Chen image');

Image gradient

%# apply sobel filter on I with replicate padding
% sobelX and sobelY
Hx = [1 0 -1; 2 0 -2; 1 0 -1] ./ 8.0;
Hy = [1 2 1;0 0 0;-1 -2 -1] ./ 8.0;

% replicate padding
Ix = [im(:,1) im(:,1:end) im(:,end)];
Ixy = [Ix(1,:);Ix(1:end,:); Ix(end,:)];

% apply sobel filter with 2d-convolution and return results
% http://www.mathworks.com/help/matlab/ref/conv2.html
Dx = conv2(Ixy, Hx);
Dx = Dx(3:end-2,3:end-2);
Dy = conv2(Ixy, Hy);
Dy = Dy(3:end-2,3:end-2);
Dxy = sqrt(Dx.^2 + Dy.^2); % look like edges, right?

%# plot
figure;
subplot(2,2,1);
imagesc(im);
colormap(gray);
title('the original image');
subplot(2,2,2);
imagesc(Dx);
colormap(gray);
title('the image gradient Dx');
subplot(2,2,3);
imagesc(Dy);
colormap(gray);
title('the image gradient Dy');
subplot(2,2,4);
imagesc(Dxy);
colormap(gray);
title('the image gradient Dxy');

Web Accessibility