【matlab代码练习10】图像增强相关的若干代码

一、函数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,[]); 





猜你喜欢

转载自blog.csdn.net/qq_15971883/article/details/79872343