《数字图像处理-OpenCV/Python》连载:图像变换、重建与复原

《数字图像处理-OpenCV/Python》连载:图像变换、重建与复原

本书京东 优惠购书链接 https://item.jd.com/14098452.html
本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html

第 13 章 图像变换、重建与复原

图像变换是指利用图像在变换空间的特殊性质,通过数学变换将图像从一个空间变换到另一个空间,以便进行分析和处理。图像复原是指利用退化过程的先验知识,沿着图像退化的逆过程复原,补偿退化过程造成的失真,由退化图像恢复并重建原始图像,以改善图像质量。

本章内容概要

  • 学习极坐标变换、霍夫变换和雷登变换。
  • 学习基于霍夫变换的直线检测和圆检测方法。
  • 介绍基于雷登变换的反投影图像重建。
  • 介绍退化图像复原的算法,如逆滤波、维纳滤波和最小二乘法滤波算法。

13.1 直角坐标与极坐标变换

在二维平面中,确定一个点的位置需要两个独立的参数。二维图像由像素点组成的矩阵来描述,在直角坐标系中用行与列来确定像素的位置。

常用的曲线,如圆和椭圆的方程在极坐标系下都具有特殊的性质,与角度相关的算法通常都需要使用极坐标系。直角坐标与极坐标的相互转化,是很多图像处理算法的基础。

OpenCV中的函数cv.cartToPolar用于将直角坐标(笛卡儿坐标)转换为极坐标,函数 cv.polarToCart用于将极坐标转换为直角坐标(笛卡儿坐标)。函数cv.magnitude与函数cv.phase用于计算直角坐标的幅值与相位。

函数原型

cv.cartToPolar(x, y[, magnitude, angle, angleInDegrees]) → magnitude, angle

cv.polarToCart(magnitude, angle[, x, y, angleInDegrees]) → x, y

cv.magnitude(x, y[, magnitude]) → magnitude

cv.phase(x, y[, angle, angleInDegrees]) → angle

函数cv.cartToPolar能实现将原点移动到变换中心后的直角坐标向极坐标的转换,函数cv.polarToCart能实现将原点移动到变换中心后的极坐标向直角坐标的转换。转换公式如下。

参数说明

  • x、y:直角坐标系的横坐标、纵坐标,是Numpy数组,浮点型数据。
  • magnitude、angle:极坐标系的幅值、角度,是Numpy数组,浮点型数据。
  • angleInDegrees:角度选项,默认值为0,表示弧度制,可选值1表示角度制。

注意问题

  • (1) 函数cv.cartToPolar的返回值magnitude、angle与输入值x、y的尺寸和类型相同,函数cv.polarToCart的返回值x、y与输入值magnitude、angle的尺寸和类型相同。
  • (2) 函数cv.cartToPolar输入参数中的可选项magnitude、angle用于指定变换中心的极坐标。类似地,函数cv.polarToCart输入参数中的可选项x、y用于指定变换中心的直角坐标。
  • (3) 极坐标与直角坐标的变换在数学上是可逆的,但在函数变换时存在精度误差,角度计算精度约为0.3度,坐标计算精度约为e-6。

【例程1301】极坐标中的环形图案和文字校正

以圆心为变换中心,直角坐标系中的圆周像素在极坐标系中显示为一条直线。

本例程通过极坐标变换将环形图案变换到极坐标系,实现环形布局文字图案的校正。

python 复制代码
# 【1301】极坐标中的环形图案和文字校正
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

if __name__ == '__main__':
    img = cv.imread("../images/Fig1301.png")  # 读取彩色图像(BGR)
    h, w = img.shape[:2]  # 图像的高度和宽度

    cx, cy = int(w/2), int(h/2)  # 以图像中心点作为变换中心
    maxR = max(cx, cy)  # 最大变换半径
    imgPolar = cv.linearPolar(img, (cx, cy), maxR, cv.INTER_LINEAR)
    imgPR = cv.rotate(imgPolar, cv.ROTATE_90_COUNTERCLOCKWISE)
    imgRebuild = np.hstack((imgPR[:,w//2:], imgPR[:,:w//2]))
    print(img.shape, imgRebuild.shape)

    plt.figure(figsize=(9, 3.5))
    plt.subplot(131), plt.axis('off'), plt.title("1. Original")
    plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))
    plt.subplot(132), plt.axis('off'), plt.title("2. Polar Transform")
    plt.imshow(cv.cvtColor(imgPolar, cv.COLOR_BGR2RGB))
    plt.subplot(133), plt.axis('off'), plt.title("3. Polar Rebuild")
    plt.imshow(cv.cvtColor(imgRebuild, cv.COLOR_BGR2RGB))
    plt.tight_layout()
    plt.show()

程序说明:

-(1) 运行结果,极坐标中的环形图案和文字校正如图13-1所示。图13-1(1)所示为原始图像,图中的文字和图案环绕排列。

-(2) 图13-1(2)所示为对图13-1(1)以圆心为中心进行极坐标变换的结果,极坐标的角度与半径分别对应直角坐标的纵坐标与横坐标。

-(3) 图13-1(3)所示为对图13-1(2)进行旋转和平移处理的结果。原始图像中环形排列的文字,在图13-1(3)所示的变换图像中水平排列,便于识别和检测。

图13-1 极坐标中的环形图案和文字校正

版权声明:

youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/136525483)

Copyright 2024 youcans, XUPT

Crated:2024-03-06

《数字图像处理-OpenCV/Python》 独家连载专栏 : https://blog.csdn.net/youcans/category_12418787.html

相关推荐
Python极客之家30 分钟前
基于深度学习的乳腺癌分类识别与诊断系统
人工智能·深度学习·分类
Mopes__30 分钟前
Python | Leetcode Python题解之第452题用最少数量的箭引爆气球
python·leetcode·题解
AI视觉网奇38 分钟前
pymeshlab 学习笔记
开发语言·python
mftang40 分钟前
TMR传感器的实现原理和特性介绍
人工智能
纪伊路上盛名在44 分钟前
如何初步部署自己的服务器,达到生信分析的及格线
linux·运维·服务器·python·学习·r语言·github
吃什么芹菜卷1 小时前
深度学习:词嵌入embedding和Word2Vec
人工智能·算法·机器学习
计算机源码社1 小时前
分享一个餐饮连锁店点餐系统 餐馆食材采购系统Java、python、php三个版本(源码、调试、LW、开题、PPT)
java·python·php·毕业设计项目·计算机课程设计·计算机毕业设计源码·计算机毕业设计选题
汤兰月1 小时前
Python中的观察者模式:从基础到实战
开发语言·python·观察者模式
chnyi6_ya1 小时前
论文笔记:Online Class-Incremental Continual Learning with Adversarial Shapley Value
论文阅读·人工智能
中杯可乐多加冰1 小时前
【AI驱动TDSQL-C Serverless数据库技术实战】 AI电商数据分析系统——探索Text2SQL下AI驱动代码进行实际业务
c语言·人工智能·serverless·tdsql·腾讯云数据库