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

相关推荐
victory04311 分钟前
关于深度学习的重要库 transformer
人工智能·深度学习·transformer
love530love1 分钟前
Flash Attention 2.8.3 在 Windows + RTX 3090 上成功编译与运行复盘笔记(2026年1月版)
人工智能·windows·笔记·python·flash_attn·flash attention·z-image
虹科网络安全1 分钟前
艾体宝洞察 | “顶会”看安全(四):Black hat-揭示 PyTorch 中 TorchScript 引擎的潜在风险
人工智能·pytorch·安全
yumgpkpm3 分钟前
Cloudera CDH5、CDH6、CDP7现状及替代方案
数据库·人工智能·hive·hadoop·elasticsearch·数据挖掘·kafka
喜欢吃豆4 分钟前
2025年大语言模型技术全景报告
人工智能·语言模型·大模型·2025博客之星
sysu_lluozh6 分钟前
【深度学习】神经网络与深度学习-神经网络的编程基础
人工智能·深度学习·神经网络
@zulnger7 分钟前
python 学习笔记(异常对象)
笔记·python·学习
Hcoco_me9 分钟前
大模型面试题49:从白话到进阶详解SFT 微调的 Loss 计算
人工智能·深度学习·神经网络·算法·机器学习·transformer·word2vec
No0d1es12 分钟前
2025年12月 GESP CCF编程能力等级认证Python七级真题
python·青少年编程·gesp·ccf
浔川python社13 分钟前
《浔川 AI 翻译 v7.0 与 v8.0 同步发布公告》
人工智能