一、函数brighten()的使用
% 通过函数brighten()调整图像的亮度
% 在MATLAB中还可以通过函数brighten()改变灰度图像的亮度。
% 在使用函数brighten()改变图像的亮度时,通常放到图像显示函数imshow()的后面。
% brighten(beta):该函数改变图像的亮度,如果0<beta<1,则图像变亮,如果-1<beta<0,则图像变暗
close all; clear all; clc;
orgin_image = imread('cameraman.tif');
figure, imshow(orgin_image);
brighten(0.6);
figure, imshow(orgin_image);
brighten(-0.6);
% 函数brighten()只是改变了图像的显示效果,并没有实际改变图像的像素值。
二、通过函数stretchlim()和函数imadjust()进行图像增强
% 通过函数stretchlim()和函数imadjust()进行图像增强
% 在利用函数imadjust()进行灰度图像增强时,可以采用函数stretch()计算灰度图像的最佳输入区间。
% 即函数imadjust[I,[low_in high_in], [low_out high_out]]中的第2个参数。
% 如果第2个参数为最佳输入区间,则图像的灰度对比度最大。
close all; clear all; clc;
I = imread('pout.tif');
M = stretchlim(I); % 获取最佳输入区间
J = imadjust(I, M, []);
subplot(121), imshow(I);
subplot(122), imshow(J);
三、通过函数imcomplement()进行灰度图像的反转变换
% 通过函数imcomplement()进行灰度图像的反转变换
close all; clear all; clc;
I = imread('glass.png');
J = imcomplement(I);
figure;
subplot(121), imshow(I);
subplot(122), imshow(J);
四、实现灰度图像的反转变换
% 实现灰度图像的反转变换
close all; clear all; clc;
I = imread('glass.png');
[row column] = size(I);
J = zeros(row, column);
for i = 1:row
for j = 1:column
J(i,j) = 255 - I(i,j);
end
end
subplot(121), imshow(I);
subplot(122), imshow(J, []);
五、通过函数imhist()计算和显示灰度图像的直方图
% 通过函数imhist()计算和显示灰度图像的直方图
close all; clear all; clc;
I = imread('pout.tif');
figure;
subplot(121), imshow(I);
subplot(122), imhist(I);
axis tight; % 使坐标系的最大值和最小值与你的数据范围一致
六、通过函数imhist()计算RGB彩色图像的颜色直方图
% 通过函数imhist()计算RGB彩色图像的颜色直方图
close all; clear all; clc;
I = imread('onion.png'); % 读入RGB彩色图像
figure;
subplot(141), imshow(I);
subplot(142), imhist(I(:, :, 1)), title('R'); % 计算R分量的直方图
subplot(143), imhist(I(:, :, 2)), title('G'); % 计算G分量的直方图
subplot(144), imhist(I(:, :, 3)), title('B'); % 计算B分量的直方图
七、通过函数imhist()计算彩色图像的HSV分量直方图
% 通过函数imhist()计算彩色图像的HSV分量直方图
close all; clear all; clc;
I = imread('football.jpg'); % 读入RGB彩色图像
J = rgb2hsv(I); % 将RGB彩色图像转换为HSV图像
figure;
subplot(141), imshow(I);
subplot(142), imhist(J(:, :, 1)); % 计算H分量的直方图
title('H');
subplot(143), imhist(J(:, :, 2)); % 计算S分量的直方图
title('S');
subplot(144), imhist(J(:, :, 3)); % 计算V分量的直方图
title('V');
八、通过函数histeq()对图像进行直方图均衡化处理
% 通过函数histeq()对图像进行直方图均衡化处理
close all; clear all; clc;
I = imread('pout.tif'); % 读入原始图像
J = histeq(I); % 直方图均衡化
figure;
subplot(121), imshow(I); % 显示原始图像
subplot(122), imshow(J); % 显示直方图均衡化后的图像
figure;
subplot(121), imhist(I); % 原始图像的直方图
axis tight;
subplot(122), imhist(J); % 处理后图像的直方图
axis tight;
九、通过函数histeq()对图像进行直方图规定化处理
% 通过函数histeq()对图像进行直方图规定化处理
close all; clear all; clc;
I = imread('tire.tif');
hgram = ones(1, 256);
J = histeq(I, hgram);
figure;
subplot(131), imshow(I);
subplot(132), imshow(J);
subplot(133), imhist(J);
axis tight;
十、通过函数mean2()计算灰度图像或彩色图像的平均值
close all; clear all; clc;
orginal_image = imread('onion.png');
gray_image = rgb2gray(orginal_image);
gray_mean = mean2(gray_image);
rgb_mean = mean2(orginal_image);
r_mean = mean2(orginal_image(:, :, 1));
g_mean = mean2(orginal_image(:, :, 2));
b_mean = mean2(orginal_image(:, :, 3));
十一、计算灰度图像的标准差
% 计算灰度图像的标准差
close all; clear all; clc;
I = imread('pout.tif');
std_I = std2(I);
J = histeq(I);
std_J = std2(J);
十二、计算两个灰度图像的相关系数
% 计算两个灰度图像的相关系数
close all; clear all; clc;
I = imread('pout.tif');
J = medfilt2(I); % 中值滤波
score = corr2(I, J);
figure;
subplot(121), imshow(I);
subplot(122), imshow(J);
十三、通过函数imcontour()计算灰度图像的等高线
% 通过函数imcontour()计算灰度图像的等高线
close all; clear all; clc;
I = imread('finger.png');
% gray_image = rgb2gray(rgb_image);
figure;
subplot(121), imshow(I);
subplot(122), imcontour(I);
十四、通过函数imfilter()对图像进行平滑
% 通过函数imfilter()对图像进行平滑
close all; clear all; clc;
I = imread('finger.png');
J = imnoise(I, 'salt & pepper', 0.02);
h = ones(3,3) / 5;
h(1,1) = 0;
h(1,3) = 0;
h(3,1) = 0;
h(3,3) = 0;
K = imfilter(J, h);
figure;
subplot(131), imshow(I);
subplot(132), imshow(J);
subplot(133), imshow(K);
十五、通过函数conv2()对图像进行平滑
% 通过函数conv2()对图像进行平滑
close all; clear all; clc;
I = im2double(imread('finger.png'));
J = imnoise(I,'gaussian', 0, 0.01);
h = ones(3,3) / 9;
K = conv2(J,h);
figure;
subplot(131), imshow(I);
subplot(132), imshow(J);
subplot(133), imshow(K);
十六、通过函数filter2()进行二维线性数字滤波
% 通过函数filter2()进行二维线性数字滤波,采用函数fspecial()产生滤波器模板
close all; clear all; clc;
I = im2double(imread('finger.png'));
J = imnoise(I, 'salt & pepper', 0.02);
h1 = fspecial('average', 3);
h2 = fspecial('average', 5);
K1 = filter2(h1, J);
K2 = filter2(h2, J);
figure;
subplot(131), imshow(I);
subplot(132), imshow(K1);
subplot(133), imshow(K2);
十七、通过函数medfilt2()对图像进行中值滤波
% 通过函数medfilt2()对图像进行中值滤波
close all; clear all; clc;
I = im2double(imread('finger.png'));
J = imnoise(I, 'salt & pepper', 0.03);
K = medfilt2(J);
figure;
subplot(131), imshow(I);
subplot(132), imshow(J);
subplot(133), imshow(K);
可以看出,中值滤波处理带有椒盐噪声的图像效果是很好的。
十八、通过函数ordfilt2()对图像进行排序滤波
% 通过函数ordfilt2()对图像进行排序滤波
close all; clear all; clc;
I = im2double(imread('finger.png')); % 读入图像
J1 = ordfilt2(I, 1, true(5));
J2 = ordfilt2(I, 25, true(5));
figure;
subplot(131), imshow(I);
subplot(132), imshow(J1); % 显示排序后第1个作为输出的结果
subplot(133), imshow(J2); % 显示排序后第25个作为输出的结果
十九、通过函数wiener2()对图像进行自适应滤波
% 通过函数wiener2()对图像进行自适应滤波
close all; clear all; clc;
I = im2double(imread('finger.png'));
J = imnoise(I, 'gaussian', 0, 0.01);
K = wiener2(J, [5 5]); % 自适应滤波
figure;
subplot(131), imshow(I);
subplot(132), imshow(J);
subplot(133), imshow(K);
二十、通过拉普拉斯算子对图像进行锐化滤波
% 通过拉普拉斯算子对图像进行锐化滤波
close all; clear all; clc;
% I = im2double(imread('finger.png')); % 读入图像
I = im2double(imread('rice.png')); % 读入图像
h = [0,1,0; 1,-4,1; 0,1,0]; % 拉普拉斯算子
J = conv2(I, h, 'same'); % 通过卷积对图像进行锐化滤波
K = I - J;
figure;
subplot(131), imshow(I,[]);
subplot(132), imshow(J,[]);
subplot(133), imshow(K,[]);
二十一、利用理想低通滤波器对图像进行滤波
% 利用理想低通滤波器对图像进行滤波
% 由实验结果可见,理想低通滤波器去掉了图像中的高频部分,图像的边缘变得模糊
close all; clear all; clc;
I = im2double(imread('coins.png'));
M = 2*size(I,1); % M=492
N = 2*size(I,2); % N=600
u = -M/2 : (M/2 - 1); % u = -246 : 245
v = -N/2 : (N/2 - 1); % v = -300 : 299
[U, V] = meshgrid(u,v); % U是一个600*492的矩阵,V是一个600*492的矩阵
D = sqrt(U.^2 + V.^2);
D0 = 80; % D0是理想低通滤波器的截止频率
H = double(D<=D0); % 理想低通滤波器
J = fftshift(fft2(I, size(H,1), size(H,2))); % 时域图像转换到频域,fft2()是二维快速傅里叶变换,fftshift()将零频分量移到频谱中心
K = J.*H; %滤波处理
L = ifft2(ifftshift(K)); % 傅里叶反变换+逆零频平移,即fftshift()的反向操作
L = L(1:size(I,1), 1:size(I,2));
figure;
subplot(121), imshow(I,[]);
subplot(122), imshow(L,[]);
二十二、利用巴特沃斯低通滤波器对图像进行滤波
% 利用巴特沃斯低通滤波器对图像进行滤波
% 通过低通滤波器后,去除了图像的高频部分,图像的边缘变得模糊
close all; clear all; clc;
I = im2double(imread('liftingbody.png'));
M = 2*size(I,1);
N = 2*size(I,2);
u = -M/2 : (M/2 - 1);
v = -N/2 : (N/2 - 1);
[U, V] = meshgrid(u,v);
D = sqrt(U.^2 + V.^2);
D0 = 50;
n = 6;
H = 1 ./ (1 + (D./D0).^(2*n));
J = fft2(I, size(H,1), size(H,2));
J = fftshift(J);
K = J.*H;
L = ifftshift(K);
L = ifft2(L);
L = L(1:size(I,1), 1:size(I,2));
figure;
subplot(121), imshow(I,[]);
subplot(122), imshow(L,[]);