图像的几何运算

目录

  • 1.图像的插值
  • 2.旋转与平移变换
  • 3.缩放与裁剪变换
  • 4.镜像变换

@
图像的几何运算是指引起图像几何形状发生改变的变换。与点运算不同的是,几何运算可以看成是像素在图像内的移动过程,该移动过程可以改变图像中物体对象之间的空间关系。

1.图像的插值

图像插值是指利用已知邻近像素点的灰度值来产生位置像素点的灰度值,以便由原始图像再生成具有更高分辨率的图像。插值是在不生成新的像素的情况下对原图像的像素重新分布,从而改变像素数量的一种方法。在图像放大过程中,像素也相应的增加,增加的过程就是‘插值’发生作用的过程,‘’插值程序自动选择信息较好的像素作为增加、弥补空白像素的空间,而并非只使用近邻的像素,所以在放大图像时,图像看上去会比较平滑、干净。无论使用何种插值方法,首先都需要找到与输出图像像素相对应的输入图像点,然后再通过计算该点附近某一像素集合的权平均值来指定输出像素的灰度值。像素的权是根据像素到点的距离来而定的,不同插值方法的区别就在于考虑的像素集合不同。最常见的插值方法如下:
(1)向前映射法:
通过输入图像像素的位置,计算输出图像对应像素的位置,将该位置像素的灰度值按某种方式分配到输出图像相邻的四个像素。
(2)向后映射法:
通过输出图像像素位置,计算输入图像对应像素的位置,根据输入图像相邻四个像素的灰度值计算该位置像素的灰度值。
(3)最近邻插值:
表示输出像素将被指定为像素点所在位置处的像素值。
(4)双线性插值:
表示输出像素值是像素2×2邻域内的平均值。
(5)双三次插值:
表示输出像素值是像素4×4邻域内的权平均值。
在MATLAB中,interp2函数用于对图像进行插值处理,该函数的调用方法如下:

A=interp2(X,Y,Z,IX,IY):Z为要插值的原始图像,IX和IY为图像的新行和新列
clear all
close all
clc
I2=imread('eight.tif');
subplot(231)
imshow(I2)
title('原始图像')
Z1=interp2(double(I2),2,'nearest');%最近邻插值法
Z1=uint8(Z1);
subplot(232)
imshow(Z1)
title('最近邻插值')
Z2=interp2(double(I2),2,'linear');%线性插值法
Z2=uint8(Z2);
subplot(232)
imshow(Z2)
title('线性插值法')
Z3=interp2(double(I2),2,'spline');%三次样条插值法
Z3=uint8(Z3);
subplot(234)
imshow(Z3);
title('三次样条插值');
Z4=interp2(double(I2),2,'cubic');%立方插值法
Z4=uint8(Z4);
subplot(235);
imshow(Z4);
title('立方插值')

2.旋转与平移变换

旋转变换的表达式为

用齐次矩阵表示为

在MATLAB中,使用imrotate函数来旋转一幅图像,调用格式如下:

B=imrotate(A,ANGLE,METHOD,BBOX)

其中,A是需要旋转的图像;ANGLE是旋转的角度,正值为逆时针;METHOD是插值方法;BBOX表示旋转后的显示方式。
图像的平移变换所用到的是直角坐标系的平移变换公式

其中x,y表示矩阵的行列方向。
对图像实现旋转变换

clear all
clc
close all
[A,map]=imread('autumn.tif');
J=imrotate(A,40,'bilinear');
subplot(121)
imshow(A,map);
title('原始图像')
subplot(122)
imshow(J,map)
title('旋转后的图像')


使用不同的插值方法对图像进行旋转

clear all
close all
clc
[I,map]=imread('trees.tif');
J=imrotate(I,35,'bilinear');
J1=imrotate(I,35,'bilinear','crop');%采用双线性插值法,对图像进行水平旋转
J2=imrotate(I,35,'nearest','crop');%采用最近邻插值法,对图像进行水平旋转
J3=imrotate(I,35,'bicubic','crop');%采用双立方插值法,对图像进行水平旋转
subplot(231)
imshow(I,map)
title('原始图像')
subplot(232)
imshow(J,map)
title('双线性插值')
subplot(233)
imshow(J1,map)
title('双线性插值')
subplot(234)
imshow(J2,map)
title('最近邻插值')
subplot(235)
imshow(J3,map)
title('双立方插值')


对图像进行平移

clear all
close all
clc
A=imread('office_4.jpg');
subplot(121)
imshow(A)
title('原始图像')
A=double(A);
A_move=zeros(size(A));
H=size(A);
A_x=50;
A_y=50;
A_movesult(A_x+1:H(1),A_y+1:H(2),1:H(3))=A(1:H(1)-A_x,1:H(2)-A_y,1:H(3));
subplot(122)
imshow(uint8(A_movesult))
title('平移后的图像')

3.缩放与裁剪变换

图像的缩放是指在保持原有图像形状的基础上,对图像进行放大或缩小。若在x方向缩放c倍,在y方向缩小d倍,则用齐次矩阵表示为

在MATLAB中,imresize函数用于改变一幅图像的大小,该函数的调用格式如下

B=imresize(A,M,METHOD)

其中,A是原图像;M为缩放系数;B为缩放后的图像;METHOD为插值方法,可取值‘nearest’,‘bilinear’和‘bicubic’。
图像上的裁剪是指将图像不需要的部分切除,只保留感兴趣的部分。在MATLAB中,imcrop函数用于从一幅图像中抽取一个矩形的部分,该函数的调用格式如下:
I2=imcrop(I):表示交互式地对灰度图像进行剪切,显示图像,允许用鼠标指定裁剪矩形。
X2=imcrop(X,map):表示交互式地对索引图像进行剪切,显示图像,允许用鼠标指定裁剪矩形。
RGB2=imcrop(RGB):表示交互式地对真彩图像进行剪切,显示图像,允许用鼠标指定裁剪矩形。
I2=imcrop(I,rect):表示非交互式地对指定灰度图像进行剪裁,按照指定的矩阵框rect剪切图像,rect四元素向量[xmin,ymin,width,height],分别表示举行的左下角和长度及宽度,这些值在空间坐标中指定。
X2=imcrop(X,map,rect):表示非交互式地对索引图像进行剪裁。
RGB2=imcrop(RGB,rect):表示非交互式地对真彩图像进行剪裁。

clear all
close all
clc
I=imread('football.jpg');
figure;
subplot(131)
imshow(I)
title('原始图像')
I=double(I);
I_en=imresize(I,4,'nearest');%最近邻法标志函数nearest扩大4倍
subplot(132)
imshow(uint8(I_en))
title('扩大4倍后的图像')
I_re=imresize(I,0.5,'nearest');
subplot(133)
imshow(uint8(I_re))
title('缩小2倍后的图像')


下面利用不同的方法对图像进行缩放

clear all
clc
close all
i=imread('pout.tif');
j=imresize(i,0.5);
j1=imresize(i,2.5);
j2=imresize(i,0.05,'nearest');%利用不同的方法对图像进行缩放
j3=imresize(i,0.05,'bilinear');
j4=imresize(i,0.05,'bicubic');
subplot(231)
imshow(i)
subplot(232)
imshow(j)
subplot(233)
imshow(j2)
subplot(234)
imshow(j1)
subplot(235)
imshow(j3)
subplot(236)
imshow(j4)


手动裁剪图像

clear all
clc
close all
[I,map]=imread('trees.tif');
figure
subplot(121)
imshow(I)
[I2,map]=imcrop(I,map);
subplot(122)
imshow(I2)


指定剪切区域大小和位置,对图像进行剪切

clear all
clc
close all
[I,map]=imread('trees.tif');
figure
subplot(121)
imshow(I)
%指定剪切区域的大小和位置,剪切图像,并返回坐标(x,y)和剪切区域rect
[x,y,I2,rect]=imcrop(I,map,[75 68 130 112]);
subplot(122)
imshow(I2)
x,y,rect

4.镜像变换

镜像变换的特点是左右颠倒或者上下颠倒,图像的镜像分为水平镜像和垂直镜像两种。
水平镜像计算公式为

由于表示图像的矩阵坐标必须非负,因此需要在进行镜像计算之后,再进行坐标平移。

垂直镜像计算公式为

由于表示图像的矩阵坐标必须非负,因此需要在进行镜像计算之后,再进行坐标平移。

在MATLAB中,flipud函数用于实现对图像的上下翻转;fliplr函数用于实现对图像的左右翻转。
对图像的镜像变换。

clear all
clc
close all
I=imread('office_4.jpg');
figure
subplot(221)
imshow(I)
title('原始图像')
I=double(I);
h=size(I);
I_fliplr(1:h(1),1:h(2),1:h(3))=I(1:h(1),h(2):-1:1,1:h(3));%水平镜像旋转
I1=uint8(I_fliplr);
subplot(222)
imshow(I1)
title('水平镜像变换')
I_flipud(1:h(1),1:h(2),1:h(3))=I(h(1):-1:1,1:h(2),1:h(3));%垂直镜像变换
I2=uint8(I_flipud);
subplot(223)
imshow(I2)
title('垂直镜像变换')
I_fliplr_flipud(1:h(1),1:h(2),1:h(3))=I(h(1):-1:1,h(2):-1:1,1:h(3));%对角镜像变换(先水平变换再垂直变换)
I3=uint8(I_fliplr_flipud);
subplot(224)
imshow(I3)
title('对角镜像变换')

原文地址:https://www.cnblogs.com/xiegaosen/p/12045102.html

时间: 2024-10-22 18:45:36

图像的几何运算的相关文章

C# 矩阵预算和一些基本的几何运算

以前工作中写的,这里备个份,有可能用到 基本的矩阵运算类,测试20阶以内应该没啥问题,超过20阶不好使... /// <summary> /// 矩阵 异常 512索引 1024无解 2046矩阵行列 /// </summary> public class Matrix { private int m_row;//行 private int m_col;//列 private double[,] m_data;//数据 /// <summary>元素 /// </

人脸图像的几何归一化和灰度归一化

转载处:http://blog.csdn.net/liulianfanjianshi/article/details/9279565 在对人脸表情进行识别时,人脸的归一化处理是至关重要的一环,它涉及到下一步处理的好坏. 人脸的归一化包括几何归一化和灰度归一化,几何归一化分两步:人脸校正和人脸裁剪.而灰度归 一化主要是增加图像的对比度,进行光照补偿. 1.几何归一化 几何归一化的目的主要是将表情子图像变换为统一的尺寸,有利于表情特征的提取.具体步骤如下: (1)标定特征点,这里用[x,y] = g

MATLAB 几何运算之图像的放大

一.最近邻插值算法 思想&步骤: 1.根据放大的倍数,新建一个大小为原图像大小*倍数的0矩阵 2.0矩阵的每一个像素点的值根据原图像求出,即分别把x,y除以倍数后得到的小数取整( matlab中的round函数取小数的最近整数 ) 3.对于边缘的情况要注意 最邻近插值简单且直观,速度也最快,但得到的图像质量不高. 代码demo: A=imread('E:\matlab\work\tiger.jpg');%读取图像信息 imshow(A);%显示原图 title('原图'); Row=size(A

【数字图像处理】图像开运算与闭运算

图像开启与闭合 图像开运算与闭运算与膨胀和腐蚀运算有关,由膨胀和腐蚀两个运算的复合与集合操作(并.交.补等)组合成的所以运算构成. 开运算与闭运算依据腐蚀和膨胀的不可逆性,演变而来.开运算:先对图像腐蚀后膨胀闭运算:先对图像膨胀后腐蚀注意:使用同一个结构元素. 图像开运算 开运算:能够去除孤立的小点.毛刺和小桥(即连通两块区域的小点),消除小物体.平滑较大物体的边界,同时并不明显改变其面积.不过这一恢复不是信息无损的,即它们通常不等于原始图像. 开运算的效果图如下图所示: 开运算总结: (1)开

opencv学习记录之图像运算

图像的运算可以是十进制的值运算也可以是二进制的位逻辑运算 一.图像加法运算 1 import cv2 2 import numpy as np 3 img1 = np.random.randint(0,256, size = [3,3] , dtype = np.uint8) 4 img2 = np.random.randint(0,256, size = [3,3] , dtype = np.uint8) 5 img3 = cv2.add(img1,img2) 6 print("img1 =\

目标检测的图像特征提取之(一)HOG特征(转载)

目标检测的图像特征提取之(一)HOG特征 [email protected] http://blog.csdn.net/zouxy09 1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的梯度方向直方图来构成特征.Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功.需要提醒的是,HOG+SVM进行行人检测的方法是法

图像的腐蚀与膨胀

数字图像处理中的形态学 转自:http://blog.csdn.net/sunny3106/archive/2007/08/15/1745485.aspx (摘自某文献,因为贴图的数目有限制,后面的公式图片没有能够上,电脑重装后文档已经找不到了,囧) 一    引言        数学形态学是一门建立在集论基础上的学科,是几何形态学分析和描述的有力工具.数学形态学的历史可回溯到19世纪.1964年法国的Matheron和Serra在积分几何的研究成果上,将数学形态学引入图像处理领域,并研制了基于

图像特征提取三大法宝:HOG特征,LBP特征,Haar特征

(一)HOG特征 1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的梯度方向直方图来构成特征.Hog特征结合 SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功.需要提醒的是,HOG+SVM进行行人检测的方法是法国研究人员Dalal 在2005的CVPR上提出的,而如今虽然有很多行人检测算法不断提出,但基本都是以HOG+SVM

paper :80 目标检测的图像特征提取之(一)HOG特征

1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的梯度方向直方图来构成特征.Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功.需要提醒的是,HOG+SVM进行行人检测的方法是法国研究人员Dalal在2005的CVPR上提出的,而如今虽然有很多行人检测算法不断提出,但基本都是以HOG+SVM的思路为主. (1)主