PROJECT 03-01 : Image Enhancement Using Intensity Transformationscss
實驗要求:markdown
Objective
To manipulate a technique of image enhancement by intensity transformation or gray level transformation.
Main requirements:
Ability of programming with C, C++, or Matlab.
Instruction manual:
The focus of this project is to experiment with intensity transformations to enhance an image. Download Fig. 3.8(a) and enhance it using
(a) The log transformation of Eq. (3.2-2).
(b) A power-law transformation of the form shown in Eq. (3.2-3).
In (a) the only free parameter is c, but in (b) there are two parameters, c and r for which values have to be selected. As in most enhancement tasks, experimentation is a must. The objective of this project is to obtain the best visual enhancement possible with the methods in (a) and (b). Once (according to your judgment) you have the best visual result for each transformation, explain the reasons for the major differences between them. app
實驗代碼:less
clear all
clc
close all
% read image
img_gray = imread('Fig4.28(a).jpg');
% img_gray = rgb2gray(img);
figure(1)
subplot(1, 2, 1);
imshow(img_gray);
title('original');
% log transformation
t1 = log(1+double(img_gray));
% Description of mat2gray:
% I = mat2gray(A, [amin amax]) converts the matrix A to the intensity image
% I. The returned matrix I contains values in the range 0.0 (black) to 1.0
% (full intensity or white). amin and amax are the values in A that correspond
% to 0.0 and 1.0 in I. Values less than amin become 0.0, and values greater
% than amax become 1.0.
t2 = mat2gray(t1);
% Description of im2uint8:
% im2uint8 takes an image as input and returns an image of class uint8.
% If the input image is of class uint8, the output image is identical to
% the input image. If the input image is not uint8, im2uint8 returns the
% equivalent image of class uint8, rescaling or offsetting the data as necessary.
img1 = im2uint8(t2);
subplot(1, 2, 2);
imshow(img1);
title('log transformation');
% power-law transformation
figure(2)
% subplot(2, 5, 1);
imshow(img_gray);
title('original');
img_t1 = double(img_gray);
cnt = 1;
pow = 0.1;
for pow = 0.1:0.2:0.9
img_t2 = im2uint8(mat2gray(img_t1.^pow));
cnt = cnt + 1;
figure(1+cnt);
% subplot(2, 5, cnt);
imshow(img_t2);
% title('power-law:\gamma=');
gamma = sprintf('power-law:gamma=%.1f', pow);
title(gamma);
end
運行結果:
首先是原圖像與作對數變換後的結果對比,隨後是冪率變換的結果。程序中已有詳細註釋。ide
PROJECT 03-02 [Multiple Uses] : Histogram Equalization函數
實驗要求:工具
Objective
To manipulate a technique of image enhancement by histogram equalization.
Main requirements:
Ability of programming with C, C++, or Matlab.
Instruction manual:
(a) Write a computer program for computing the histogram of an image.
(b) Implement the histogram equalization technique discussed in Section 3.3.1.
(c) Download Fig. 3.8(a) and perform histogram equalization on it.
As a minimum, your report should include the original image, a plot of its histogram, a plot of the histogram-equalization transformation function, the enhanced image, and a plot of its histogram. Use this information to explain why the resulting image was enhanced as it was.ui
簡單點來講,實驗中咱們要進行直方圖均衡化,能夠調用MATLAB工具箱中的histeq函數。
上代碼:this
clear all;
clc;
close all;
%%
img = imread('Boat512.bmp');
subplot(2,2,1);
imshow(img);
subplot(2,2,2);
imhist(img);
img1 = histeq(img,256);
subplot(2,2,3);
imshow(img1);
subplot(2,2,4);
imhist(img1);
運行結果:
進行直方圖均衡化以後,咱們能夠很明顯地看到圖像的對比度加強了。atom
PROJECT 03-03 [Multiple Uses] :Arithmetic Operations
實驗要求:
Objective
To know how to do arithmetic operations on an image and the functions of some arithmetic operations.
Main requirements:
Ability of programming with C, C++, or Matlab.
Instruction manual:
Write a computer program capable of performing the four arithmetic operations between two images. This project is generic, in the sense that it will be used in other projects to follow. (See comments on pages 112 and 116 regarding scaling). In addition to multiplying two images, your multiplication function must be able to handle multiplication of an image by a constant.
實驗中咱們要對圖像作算術運算,觀察結果。
實驗代碼:
%
clear all;
clc;
close all;
%
% img = imread('peppers_color.jpg');
% size = size(img);
% if numel(size) >= 2
% img = rgb2gray(img);
% imwrite(img,'gray_img.jpg');
% end
% clear size;
% 讀取原圖像
img = imread('gray_img.jpg');
subplot(4,3,1);
imshow(img);
title('image 1');
% 反轉灰度
img1 = 255 - img;
subplot(4,3,2);
imshow(img1);
title('image 2');
% 圖像相加
img2 = imadd(img, img1);
subplot(4,3,3);
imshow(img2);
title('add');
% 圖像相減
subplot(4,3,4);
imshow(img2);
title('image 1');
subplot(4,3,5);
imshow(img);
title('image 2');
img3 = imsubtract(img2, img);
subplot(4,3,6);
imshow(img3);
title('subtract');
% 圖像相乘
subplot(4,3,7);
imshow(img);
title('image 1');
subplot(4,3,8);
imshow(img1);
title('image 2');
img4 = immultiply(img, img1);
subplot(4,3,9);
imshow(img4);
title('multiply');
%% 圖像相除
subplot(4,3,10);
imshow(img4);
title('image 1');
subplot(4,3,11);
imshow(img1);
title('image 2');
img5 = imdivide(img4, img1);
subplot(4,3,12);
imshow(img5);
title('divide');
實驗結果:
PROJECT 03-04 [Multiple Uses] : Spatial Filtering
實驗要求:
Objective
To understand what is special filtering and how the parameters of the filtering mask affect the output of filters..
Main requirements:
Ability of programming with C, C++, or Matlab.
Instruction manual:
Write program to perform spatial filtering of an image (see Section 3.5 regarding implementation). You can fix the size of the spatial mask at 3 x 3, but the coefficients need to be variables that can be input into your program. This project is generic, in the sense that it will be used in other projects to follow.
使用3 x 3的濾波器模板,對圖像進行空間濾波。程序中調用MATLAB的fspecial函數生成3 x 3濾波器模板。
%
close all;
clc;
clear all;
%
img = imread('Fig5.10(a).jpg');
subplot(1,3,1);
imshow(img);
title('original');
% 均值濾波
% h = fspecial('average', hsize) returns an averaging filter h of size hsize.
% The argument hsize can be a vector specifying the number of rows and columns
% in h, or it can be a scalar, in which case h is a square matrix. The default
% value for hsize is [3 3].
h = fspecial('average',[3,3]); % 均值濾波器
img1 = imfilter(img, h);
subplot(1,3,2);
imshow(img1);
title('average filter');
% 中值濾波
% B = medfilt2(A) performs median filtering of the matrix A using the default
% 3-by-3 neighborhood.
img2 = medfilt2(img);
subplot(1,3,3);
imshow(img2);
title('median filter');
實驗結果:
PROJECT 03-05 : Enhancement Using the Laplacian
實驗要求:
Objective:
To further understand the well-known technique of Laplacian and how it works on an image.
Main requirements:
Ability of programming with C, C++, or Matlab.
Instruction manual:
(a) Use the programs developed in Projects 03-03 and 03-04 to implement the Laplacian enhancement technique described in connection with Eq. (3.7-5). Use the mask shown in Fig. 3.39(d).
(b) Duplicate the results in Fig. 3.40. You will need to download Fig. 3.40(a).
使用拉普拉斯算子對圖片進行空間濾波。
實驗代碼:
%
close all;
clc;
clear all;
%
img = imread('moon.jpg');
subplot(3, 1, 1);
imshow(img);
title('original');
%
h = fspecial('laplacian', 0.2);
img1 = imfilter(img, h);
subplot(3, 2, 3);
imshow(img1);
title('default laplacian');
%
w = [-1, -1, -1; -1, 8, -1; -1, -1, -1];
% 'replicate', 圖像大小經過複製外邊界的值來擴展
img2 = imfilter(img, w, 'replicate');
subplot(3, 2, 4);
imshow(img2);
title('mask');
%
img3 = img + img1;
subplot(3, 2, 5);
imshow(img3);
title('output1');
%
img4 = img + img2;
subplot(3, 2, 6);
imshow(img4);
title('output2');
實驗結果:
能夠看出使用拉普拉斯算子能夠突出邊緣,將其與原圖像疊加便能加強邊緣。左邊的是使用fspecial生成拉普拉斯算子,右邊的是直接輸入的拉普拉斯算子模板,即:
w = [-1, -1, -1; -1, 8, -1; -1, -1, -1];
PROJECT 03-06 :Unsharp Masking
實驗要求:
Objective:
To further understand image enhancement technique of unsharp masking and how it works on an image.
Main requirements:
Ability of programming with C, C++, or Matlab.
Instruction manual:
(a) Use the programs developed in Projects 03-03 and 03-04 to implement high-boost filtering, as given in Eq. (3.7-8). The averaging part of the process should be done using the mask in Fig. 3.34(a).
(b) Download Fig. 3.43(a) and enhance it using the program you developed in (a). Your objective is to choose constant A so that your result visually approximates Fig. 3.43(d).
非銳化掩蔽,使用前面實驗的程序來實現加強濾波。
直接上程序:
%
close all;
clc;
clear all;
%
img = imread('test.png');
figure(1);
subplot(2,2,1);
imshow(img);
title('original');
cnt = 1;
for alpha = [0.1 0.4 0.9]
h = fspecial('laplacian', alpha);
img_temp =imfilter(img, h);
img_out = img + img_temp;
cnt = cnt + 1;
subplot(2,2,cnt);
imshow(img_out);
title(['\alpha = ', num2str(alpha)]);
% subplot(1, 2, 1);
% imshow(img_temp);
% title(['\alpha = ', num2str(alpha)]);
% subplot(1, 2, 2);
% imshow(img_out);
% title('output');
end
實驗結果: