《数字图像处理-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

相关推荐
飞哥数智坊36 分钟前
GPT-5-Codex 发布,Codex 正在取代 Claude
人工智能·ai编程
倔强青铜三43 分钟前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试
虫无涯2 小时前
Dify Agent + AntV 实战:从 0 到 1 打造数据可视化解决方案
人工智能
Dm_dotnet4 小时前
公益站Agent Router注册送200刀额度竟然是真的
人工智能
算家计算4 小时前
7B参数拿下30个世界第一!Hunyuan-MT-7B本地部署教程:腾讯混元开源业界首个翻译集成模型
人工智能·开源
用户2519162427114 小时前
Python之语言特点
python
机器之心4 小时前
LLM开源2.0大洗牌:60个出局,39个上桌,AI Coding疯魔,TensorFlow已死
人工智能·openai
刘立军4 小时前
使用pyHugeGraph查询HugeGraph图数据
python·graphql
Juchecar5 小时前
交叉熵:深度学习中最常用的损失函数
人工智能
林木森ai5 小时前
爆款AI动物运动会视频,用Coze(扣子)一键搞定全流程(附保姆级拆解)
人工智能·aigc