【OpenCV 例程 300 篇】110. 投影和雷登变换

本文介绍了图像复原与重建中的投影和雷登变换,讲解了计算机断层成像的基本原理及其在医学诊断和地矿探测中的应用。雷登变换作为三维重建的数学基础,通过积分求得物体内部结构的图像。文章提供了示例代码展示如何使用OpenCV进行雷登变换,并展示了正弦图的结果。
摘要由CSDN通过智能技术生成

专栏地址:『youcans 的 OpenCV 例程 300篇 - 总目录』

【第 7 章:图像复原与重建】
110. 投影和雷登变换
111. 雷登变换反投影重建图像
112. 滤波反投影重建图像


【youcans 的 OpenCV 例程 300 篇】110. 投影和雷登变换


7. 投影重建图像

7.1 计算机断层成像(Computed tomography)

图像重建(Image Reconstruction)的基本思想,就是通过探测物体的投影数据,重建物体的实际内部构造。

断层成像就是要获得物体内部的截面图像。利用 X射线、超声波等射线穿透被遮挡物体的透视投影图,可以计算恢复物体的断层图,进而可以利用断层图或直接从二维透视投影图重建物体的形状和内部结构。其原理是射线在穿过不同组织时的吸收率不同,在成像面上得到不同的投射强度,由此反演求得内部分布的图像。

X 射线、CT 技术就是应用断层重建的医学诊断方法。计算机断层扫描(CT)已经发展成为一种非常成功和必不可少的医学诊断工具,被认为是 X 射线发现以来医学影像领域最伟大的发明。

X 射线计算机断层成像的基本原理是:使用 X 射线从多个不同方向和角度对物体进行扫描,通过反投影算法获取物体内部结构的切片,堆叠这些切片就可以得到人体的三维表示。

投影重建还应用于地矿探测,接收不同地层和矿体反射的超声波, 按照超声波在媒质的透射率和反射规律,对透射投影图进行分析计算,就可以恢复重建地下的矿体形状。

7.2 投影和雷登变换(Radon transform)

雷登变换是三维重建的数学基础。

一条直线 y = a x + b y=ax+b y=ax+b 的法线束为:
x c o s θ + y s i n θ = ρ x cos \theta + y sin \theta = \rho xcosθ+ysinθ=ρ
沿该直线对函数 f ( x , y ) f(x,y) f(x,y) 进行积分,这个积分结果就是雷登变换后的函数 R f \mathcal{R}f Rf 在这条直线上的值:
g ( ρ , θ ) = ∫ − ∞ + ∞ ∫ − ∞ + ∞ f ( x , y )   δ ( x c o s θ + y s i n θ − ρ ) d x d y g(\rho, \theta) = \int ^{+\infty}_{-\infty} \int ^{+\infty}_{-\infty} f(x,y) \ \delta(x cos \theta + y sin \theta - \rho) dxdy g(ρ,θ)=++f(x,y) δ(xcosθ+ysinθρ)dxdy
雷登变换的离散形式:
g ( ρ , θ ) = ∑ x = 0 M − 1 ∑ y = 0 N − 1 f ( x , y )   δ ( x c o s θ + y s i n θ − ρ ) g(\rho, \theta) = \sum ^{M-1}_{x=0} \sum^{N-1}_{y=0} f(x,y) \ \delta(x cos \theta + y sin \theta - \rho) g(ρ,θ)=x=0M1y=0N1f(x,y) δ(xcosθ+ysinθρ)

雷登变换将二维空间 x y xy xy 映射到了另一个二维空间 α s \alpha s αs,称为直线空间。

雷登变换常被用于医学影像处理,利用反雷登变换可以进行三维图像重建。


例程 9.23:雷登变换正弦图

    # # 9.23: 雷登变换正弦图
    from scipy import ndimage
    def discreteRadonTransform(image, steps):
        channels = image.shape[0]
        res = np.zeros((channels, channels), dtype=np.float32)
        for s in range(steps):
            rotation = ndimage.rotate(image, -s * 180/steps, reshape=False).astype(np.float32)
            res[:, s] = sum(rotation)
        return res

    # # 读取原始图像
    plt.figure(figsize=(9, 7))
    fileImg = ["Fig0534a.tif", "Fig0534b.tif", "Fig0534c.tif"]  # 原始图像 文件名
    for i in range(len(fileImg)):
        img = cv2.imread("../images/"+fileImg[i], flags=0)  # flags=0 读取为灰度图像
        imgRadon = discreteRadonTransform(img, img.shape[0])  # Radon 变换
        print(img.shape, imgRadon.shape)

        plt.subplot(2, len(fileImg), i + 1), plt.axis('off')  # 绘制原始图像
        plt.title("origin image"), plt.imshow(img, 'gray')
        plt.subplot(2, len(fileImg), i + len(fileImg) + 1), plt.axis('off')  # 绘制 sinogram 图
        plt.title("Radon transform"), plt.imshow(imgRadon, 'gray')

    plt.tight_layout()
    plt.show()

在这里插入图片描述


(本节完)


版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/123088031)
Copyright 2022 youcans, XUPT
Crated:2022-2-25


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

youcans_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值