function ps2 (mode) %% This is the MATLAB script for PS2. %% By Alan Daniels %% Note: This has some control code to slow it down. %% Matlab chokes when you ask it to do to much. %% Read in the original image. [ORIG, MAP] = imread('lung.jpg', 'JPEG'); ORIG = ind2gray(ORIG, gray(256)); FILT = filter2(fspecial('gaussian', 7), ORIG); imwrite(FILT, 'lung_filt.jpg', 'JPEG'); NOISY = imnoise(ORIG, 'gaussian', 0.12); imwrite(NOISY, 'lung_noisy.jpg', 'JPEG'); CLEAN = filter2(fspecial('gaussian', 7), imnoise(ORIG, 'gaussian', 0.12)); imwrite(CLEAN, 'lung_clean.jpg', 'JPEG'); %% Downward gradient, 1 by 2. %% if mode == 1 SCALE = 10; GY = double(zeros(2, 1)); GY(1, 1) = 1; GY(2, 1) = -1; II = abs(conv2(GY, ORIG)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'graddown_1x2_orig.jpg', 'JPEG'); II = abs(conv2(GY, FILT)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'graddown_1x2_filt.jpg', 'JPEG'); II = abs(conv2(GY, NOISY)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'graddown_1x2_noisy.jpg', 'JPEG'); II = abs(conv2(GY, CLEAN)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'graddown_1x2_clean.jpg', 'JPEG'); %% end %% Downward gradient, 2 by 2. %% if mode == 2 SCALE = 10; GY = double(zeros(2, 2)); GY(1, 1:2) = [ 1 1]; GY(2, 1:2) = [-1 -1]; II = abs(conv2(GY, ORIG)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'graddown_2x2_orig.jpg', 'JPEG'); II = abs(conv2(GY, FILT)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'graddown_2x2_filt.jpg', 'JPEG'); II = abs(conv2(GY, NOISY)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'graddown_2x2_noisy.jpg', 'JPEG'); II = abs(conv2(GY, CLEAN)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'graddown_2x2_clean.jpg', 'JPEG'); %end %% Rightward gradient, 1 by 2. %% if mode == 3 SCALE = 10; GX = double(zeros(2, 1)); GX(1, 1:2) = [1 -1]; II = abs(conv2(GX, ORIG)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'gradright_1x2_orig.jpg', 'JPEG'); II = abs(conv2(GX, FILT)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'gradright_1x2_filt.jpg', 'JPEG'); II = abs(conv2(GX, NOISY)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'gradright_1x2_noisy.jpg', 'JPEG'); II = abs(conv2(GX, CLEAN)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'gradright_1x2_clean.jpg', 'JPEG'); %end %% Rightward gradient, 2 by 2. %% if mode == 4 SCALE = 10; GX = double(zeros(2, 2)); GX(1, 1:2) = [1 -1]; GX(2, 1:2) = [1 -1]; II = abs(conv2(GX, ORIG)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'gradright_2x2_orig.jpg', 'JPEG'); II = abs(conv2(GX, FILT)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'gradright_2x2_filt.jpg', 'JPEG'); II = abs(conv2(GX, NOISY)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'gradright_2x2_noisy.jpg', 'JPEG'); II = abs(conv2(GX, CLEAN)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'gradright_2x2_clean.jpg', 'JPEG'); %end %% Roberts operator. %% if mode == 5 SCALE = 5; GX = double(zeros(2, 2)); GX(1, 1:2) = [1 0]; GX(2, 1:2) = [0 -1]; GY = double(zeros(2, 2)); GY(1, 1:2) = [0 -1]; GY(2, 1:2) = [1 0]; II = abs(conv2(GX, ORIG)) + abs(conv2(GY, ORIG)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'roberts_orig.jpg', 'JPEG'); II = abs(conv2(GX, FILT)) + abs(conv2(GY, FILT)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'roberts_filt.jpg', 'JPEG'); II = abs(conv2(GX, NOISY)) + abs(conv2(GY, NOISY)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'roberts_noisy.jpg', 'JPEG'); II = abs(conv2(GX, CLEAN)) + abs(conv2(GY, CLEAN)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'roberts_clean.jpg', 'JPEG'); %end %% Sobel operator. %% if mode == 6 SCALE = 5; GX = double(zeros(3, 3)); GX(1, 1:3) = [-1 0 1]; GX(2, 1:3) = [-2 0 2]; GX(3, 1:3) = [-1 0 1]; GY = double(zeros(3, 3)); GY(1, 1:3) = [ 1 2 1]; GY(2, 1:3) = [ 0 0 0]; GY(3, 1:3) = [-1 -2 -1]; II = abs(conv2(GX, ORIG)) + abs(conv2(GY, ORIG)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'sobel_orig.jpg', 'JPEG'); II = abs(conv2(GX, FILT)) + abs(conv2(GY, FILT)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'sobel_filt.jpg', 'JPEG'); II = abs(conv2(GX, NOISY)) + abs(conv2(GY, NOISY)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'sobel_noisy.jpg', 'JPEG'); II = abs(conv2(GX, CLEAN)) + abs(conv2(GY, CLEAN)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'sobel_clean.jpg', 'JPEG'); %end %% Prewitt operator. %% if mode == 7 SCALE = 5; GX = double(zeros(3, 3)); GX(1, 1:3) = [-1 0 1]; GX(2, 1:3) = [-1 0 1]; GX(3, 1:3) = [-1 0 1]; GY = double(zeros(3, 3)); GY(1, 1:3) = [ 1 1 1]; GY(2, 1:3) = [ 0 0 0]; GY(3, 1:3) = [-1 -1 -1]; II = abs(conv2(GX, ORIG)) + abs(conv2(GY, ORIG)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'prewitt_orig.jpg', 'JPEG'); II = abs(conv2(GX, FILT)) + abs(conv2(GY, FILT)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'prewitt_filt.jpg', 'JPEG'); II = abs(conv2(GX, NOISY)) + abs(conv2(GY, NOISY)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'prewitt_noisy.jpg', 'JPEG'); II = abs(conv2(GX, CLEAN)) + abs(conv2(GY, CLEAN)); II = II * SCALE; clip(II); imshow(II); imwrite(II, 'prewitt_clean.jpg', 'JPEG'); %% end