【matlab程式碼練習10】影象增強相關的若干程式碼
阿新 • • 發佈:2019-02-16
一、函式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,[]);