1、数字图像处理期末复习资料全空域内对图像进行平移运算(几何运算)图像平移变换式的矩阵形式为:P37close all;clear all;clc;%图像的平移运算Im = imread(meinv.jpg);if numel(size(Im) 2 %如果是彩色图像就转换为灰度图像 Im = rgb2gray(Im); endIm = im2double(Im); %归一化处理subplot(1, 2, 1); imshow(Im); title(平移前的图像);m, n = size(Im); %获取图像大小res = zeros(m, n) + 255; %构造结果矩阵。每个像素点默认初始化为
2、0(黑色)delX = 50; %平移量XdelY = 50; %平移量Ymask = 1 0 delX; 0 1 delY; 0 0 1; %平移的变换矩阵for i = 1 : m for j = 1 : n tmp = i; j; 1; tmp = mask * tmp; %矩阵乘法 得到的结果是一个3行1列的数 x = tmp(1, 1); y = tmp(2, 1); %判断变换后的位置是否越界 if (x = m) & (y = 1) & (y = 1) res(x, y) = Im(i, j); end endendsubplot(1, 2, 2); imshow(res); t
3、itle(平移后的图像);空域内对图像进行镜像运算(几何运算)%灰度图像clcclearimg = imread(meinv.jpg);%读取图像if ndims(img) = 3 %ndims(a)表示矩阵a的维数。如果是彩色图像就转换为灰度图像 img = rgb2gray(img); % 转换endsubplot(1, 3, 1); imshow(img); title(原始图像);img = im2double(img);% 转换为double类型,使所有点在0-1之间m, n = size(img);%获取图像大小res1 = zeros(m, n) + 255;%构造结果矩阵,加2
4、55将图像初始化为白色,不加就是黑色res2 = zeros(m, n) + 255;for i = 1 : m for j = 1 : n res1(i, n - j + 1) = img(i, j);%水平镜像 res2(m - i + 1, j) = img(i, j);%垂直镜像 endendsubplot(1, 3, 2); imshow(res1); title(水平镜像);subplot(1, 3, 3); imshow(res2); title(垂直镜像);imwrite(res1, hor.bmp);imwrite(res2, ver.bmp);%彩色图像clcclearim
5、g = imread(meinv.jpg);%读取图像subplot(1, 3, 1); imshow(img); title(原始图像);img = im2double(img);% 转换为double类型,使所有点在0-1之间m, n, l = size(img);%获取图像大小res1 = zeros(m, n, l) + 255;%构造结果矩阵,加255将图像初始化为白色,不加就是黑色res2 = zeros(m, n, l) + 255;for i = 1 : m for j = 1 : n for k = 1 : l res1(i, n - j + 1, k) = img(i, j
6、, k);%水平镜像 res2(m - i + 1, j, k) = img(i, j, k);%垂直镜像 end endendsubplot(1, 3, 2); imshow(res1); title(水平镜像);subplot(1, 3, 3); imshow(res2); title(垂直镜像);imwrite(res1, hor.bmp);imwrite(res2, ver.bmp);空域内使用指定的模板对灰度图像进行平滑处理1%均值滤波clcclose all;clearimg = imread(meinv.jpg);if numel(size(img) 2 %如果是彩色图像就转换为
7、灰度图像 img = rgb2gray(img); endfigure;imshow(img);img = double(img);%n是模板大小(即nn) n = 3; a(1 : n, 1 : n) = 1; %a即nn模板,元素全是1 height, width = size(img); %输入图像是height,width的,且hightn,widthn x1 = double(img); x2 = x1;for i = 1 : height - n + 1 for j = 1 : width - n + 1 c = x1(i : i + (n - 1), j : j + (n - 1
8、) .* a; %取出x1中从(i,j)开始的n行n列元素与模板相乘 s = sum(sum(c); %求c矩阵中各元素之和 x2(i + (n - 1) / 2,j + (n - 1) / 2) = s / (n * n); %将与模板运算后的各元素的均值赋给模板中心位置的元素 end end %未被赋值的元素取原值 pha = uint8(x2); figure; imshow(pha);2%中值滤波(最大值滤波、最小值滤波)clcclose all;clearimg = imread(meinv.jpg);if numel(size(img) 2 %如果是彩色图像就转换为灰度图像 img
9、 = rgb2gray(img); endfigure;imshow(img);img = double(img);%n是模板大小(即nn) n = 3; a(1 : n, 1 : n) = 1; %a即nn模板,元素全是1 height, width = size(img); %输入图像是height,width的,且hightn,widthn x1 = double(img); x2 = x1;for i = 1 : height - n + 1 for j = 1 : width - n + 1 c = x1(i : i + (n - 1),j : j + (n - 1); %取出x1中
10、从(i,j)开始的n行n列元素,即模板(nn的) e = c(1, :); %是c矩阵的第一行 for u = 2 : n e = e, c(u, :); %将c矩阵变为一个行矩阵 end %mm=median(e);%mm是中值(mm=max(e)是最大值,mm = min(e)是最小值) mm = min(e); x2(i + (n - 1) / 2,j + (n - 1) / 2) = mm; %将模板各元素的中值赋给模板中心位置的元素 end end %未被赋值的元素取原值 pha = uint8(x2); figure; imshow(pha);彩色图像平滑处理(均值滤波)close
11、 all;clearclcimg = imread(meinv.jpg);if (numel(size(img) 2 %如果是彩色图像就转换为灰度图像 img = rgb2gray(img); endsubplot(1, 3, 1); imshow(img); title(原始图像);m, n = size(img);img = im2double(img);dimg = img;%边界for i = 2 : m - 1%非边界 for j = 2 : n - 1 dimg(i, j) = (img(i + 1, j) + img(i - 1, j) + img(i, j + 1) + img
12、(i, j - 1) / 4; endendsubplot(1, 3, 2); imshow(dimg); title(模板运算后的图像);subplot(1, 3, 3); imshow(img + dimg); title(增强的图像);2模板:clcclose all;clearimg = imread(meinv.jpg);if numel(size(img) 2 %如果是彩色图像就转换为灰度图像 img = rgb2gray(img); endfigure;imshow(img);m, n = size(img);img = im2double(img);a = input(请输入a
13、值(范围在0, 1之间):);dimg = img; %边界for i = 2 : m - 1 %非边界 for j = 2 : n - 1 dimg(i, j) = img(i - 1, j) * (-a) + img(i, j - 1) * (-a) + img(i, j) * (1 + 4 * a) + img(i, j + 1) * (-a) + img(i + 1, j) * (-a); endendfigure; imshow(img + dimg);3模板:clcclose all;clearimg = imread(meinv.jpg);if numel(size(img) 2
14、 %如果是彩色图像就转换为灰度图像 img = rgb2gray(img); endfigure;imshow(img);m, n = size(img);img = im2double(img);dimg = img; %边界for i = 3 : m - 2 %处理非边界像素 for j = 3 : n - 2 dimg(i, j) = img(i - 2, j - 2) + img(i - 2, j - 1) * 4 + img(i - 2, j) * 7 + img(i - 2, j + 1) * 4 + img(i - 2, j + 2) + img(i - 1, j - 2) *
15、4 + img(i - 1, j - 1) * 16 + img(i - 1, j) * 26 + img(i - 1, j + 1) * 16 + img(i - 1, j + 2) * 4 + img(i, j - 2) * 7 + img(i, j - 1) * 26 + img(i, j) * 41 + img(i, j + 1) * 26 + img(i, j + 2) * 7 + img(i + 1, j - 2) * 4 + img(i + 1, j - 1) * 16 + img(i + 1, j) * 26 + img(i + 1, j + 1) * 16 + img(i +
16、 1, j + 2) * 4 + img(i + 2, j - 2) + img(i + 2, j - 1) * 4 + img(i + 2, j) * 7 + img(i + 2, j + 1) * 4 + img(i + 2, j + 2); endendfigure; imshow(img + dimg / 273);拉普拉斯模板、锐化算子(P65)4彩色图像 拉普拉斯模板close all;clearclc;img = imread(meinv.jpg);if (numel(size(img) 2 %如果是彩色图像就转换为灰度图像 img = rgb2gray(img); endsub
17、plot(221); imshow(img); xlabel(原图像);img = double(img); %数据类型转换img = fft2(img); %图像Fourier变换img = fftshift(img); %Fourier变换平移,中心变换%中心变换代码实现,反中心变化也是一样的% for i = 1 : m% for j = 1 : n% img(i, j) = (-1) (i + j) * img(i, j);% end% endF2 = log(abs(img); %对Fourier变换结果取绝对值,然后取对数subplot(222);imshow(F2, ,InitialMagnification,fit); %将计算后的矩阵用图像表示xlabel(b)原始图像的Fourier变换图像 );N1, N2 = size(img); %Fourier变换图像尺寸n = 2; %参数赋初值。高通n = 0.3d0 = 205;n
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1