学习OpenCV-图像变换

图像变换

图像变换(image transform,即将一幅图像转变成图像数据)的另一种表现形式。最常用的是傅里叶变换。

卷积

卷积表示对图像的每一个部分进行操作。从此意义上,图像处理的许多操作可以理解成卷积的特殊情况。一个特殊卷积是由卷积核的形式决定的。
卷积核的本质是一个大小固定、由数值参数构成的数组,数组的参考点通常位于数组的中心。数组的大小成为核支撑。技术上说,核支撑实际上仅由核数组的非0部分组成。
计算特定点的卷积值,首先将核的参考点定位到图像的第一个像素点,核的其余元素覆盖图像中其相应的局部像素点。将点的核的值与图象中相应图像点的值相乘并求和,并将结果放在对应位置。再整个图像上扫描卷积核对图像的每个点重复操作。

卷积边界

进行卷积时,默认会将源图像拷贝并扩大边界进行填充操作。

梯度和Sobel导数

导数的计算(或其近似值)是一个最重要并且基本的卷积。通常,表达微分的最常用操作是Sobel微分算子,其包含任意阶的积分及融合偏导。
Sobel导数并不是真正的导数,其真正表示的是多项式拟合。使用更大的核可以在更多像素上计算这种拟合。使用Sobel算子在较小的核上计算时精度较低。在X核Y滤波器中该问题并不严重,但在尝试估计方向导数时,由于需要使用反正切,问题就变大了。、

Scharr滤波器

使用3x3核进行图像度量时应该使用Scharr滤波器,更加准确。、

拉普拉斯算子

通常用于检测“团块”,周围更高的单点或小块使拉普拉斯算子最大;周围是更低值的点使函数的负值最大化。基于拉普拉斯算子可以进行边缘检测。

Canny算子

用于边缘检测

霍夫变换

在图像中寻找直线、圆及其他简单形状的方法。

霍夫线性变换

寻找直线

霍夫圆变换

寻找圆

重映射

将一幅图像中一个位置的像素重映射到另一个位置。常用于矫正(纠正失真)标定和立体的图像。

拉伸、收缩、扭曲和旋转

图像的几何操作。有基于2x3矩阵的仿射变换、基于3x3矩阵的透视变换或称单应性映射。后者可以当作三维平面被特定观察者感知(可能不是垂直观测)的计算方法。

仿射变换

两种情况:对图像执行变换;对点序列计算出此变换。

稠密仿射变换

对图像执行操作,需要执行平滑操作。

稀疏仿射变换

对数组进行仿射变换操作。

透视变换

由于变换需要与最后一维相除,因此在过程中会失去一维,所以不是线性变换。

密集透视变换
稀疏透视变换

离散傅里叶变换(DFT)

频谱乘法

卷积和DFT

利用DFT可以大大加快卷积运算的速度。因为空间域的卷积运算可以转化为频谱的乘法运算。在算得图像的傅里叶变换及卷积滤波器的傅里叶变换后即可在相对图像像素数目的线性时间内完成运算。

离散余弦变换(DCT)

与DFT思想相似,但结果局限于实数。

积分图像

积分图是一个数据结构,可实现子区域的快速求和。

距离变换

直方图均衡化

Opencv-python图像变换是通过使用不同的变换矩阵来实现的。其中,平移是一种最简单的空间变换。使用Opencv的函数cv2.warpAffine()可以实现平移操作。在代码中,我们需要定义一个变换矩阵M,这个矩阵是一个2行3列的矩阵,决定了平移的方式。其中,M矩阵中的tx和ty分别表示在x和y方向上平移的距离。更具体地说,如果我们向右平移tx个像素,向下平移ty个像素,那么变换矩阵M的定义如下: import numpy as np rows, cols = img.shape[:2] M = np.float32([[1, 0, tx], [0, 1, ty]]) dst = cv2.warpAffine(img, M, (cols, rows)) 在上述代码中,我们使用了NumPy库来创建一个2x3的浮点型变换矩阵M,并将其传递给cv2.warpAffine()函数,该函数会将图像img按照定义的方式进行平移,并生成一个新的图像dst。最后,我们可以通过cv2.imshow()函数显示平移后的图像。 除了平移之外,Opencv还提供了其他的图像变换操作,比如缩放。缩放可以按照指定的宽度和高度来调整图像的大小,也可以按照比例来进行缩放。通过cv2.resize()函数可以实现缩放操作。在代码中,我们可以使用下面的方式来进行缩放操作: import cv2 img = cv2.imread('drawing.jpg') # 按照指定的宽度、高度缩放图片 res = cv2.resize(img, (width, height)) # 按照比例缩放图片 res2 = cv2.resize(img, None, fx=scale_x, fy=scale_y, interpolation=cv2.INTER_LINEAR) 在上面的代码中,我们首先使用cv2.imread()函数读取图像,并将其存储在变量img中。然后,我们可以使用cv2.resize()函数来调整图像的大小。其中,如果我们指定了宽度和高度,那么图像将按照这些指定的大小进行缩放;如果我们指定了fx和fy的比例因子,那么图像将按照这些比例进行缩放。最后,我们可以使用cv2.imshow()函数来显示缩放后的图像。 总结起来,Opencv-python提供了多种图像变换操作,包括平移、缩放等。通过使用相应的函数和变换矩阵,我们可以实现对图像的各种变换操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [opencv-python 详解图像的几何变换缩放、平移、旋转、翻转](https://blog.csdn.net/RayChiu757374816/article/details/120036004)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值