You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

scikit-image中是否实现了Radon变换的伴随算子(对偶变换)?

Radon变换伴随算子在scikit-image中的实现问题

scikit-image目前没有直接实现维基百科定义的Radon变换伴随算子(对偶变换),你发现的iradon(filter_name=None)未滤波反投影和伴随算子的内积不匹配,确实是因为缩放/归一化的差异导致的。

核心原因

radon和iradon的设计初衷是服务于CT图像重建,而非严格实现数学上的算子对偶性。未滤波反投影做了工程化的缩放处理,目的是让重建结果的亮度、尺度更符合视觉需求,而非满足〈Ax,y〉=〈x,Aᵀy〉的内积等式。

手动实现伴随算子的思路

你可以通过给iradon(filter_name=None)的输出加上修正缩放因子,来得到符合数学定义的伴随算子。具体的因子需要结合角度采样间隔、探测器采样数、图像尺寸推导,这里给一个实用的修正示例:

import numpy as np
from skimage.transform import radon, iradon

# 生成测试用随机图像和角度数组
img = np.random.randn(128, 128)
angles = np.linspace(0, 180, 180, endpoint=False)

# 计算Radon变换结果Ax
sinogram = radon(img, angles=angles)
# 随机生成匹配尺寸的y
y = np.random.randn(*sinogram.shape)

# 获取未滤波反投影结果
raw_unfiltered = iradon(y, angles=angles, filter_name=None)

# 计算修正因子(基于Radon对偶变换的数学定义)
theta_step = np.deg2rad(angles[1] - angles[0])
correction = theta_step / (2 * np.pi)
# 修正后得到伴随算子的输出Aᵀy
adjoint_result = raw_unfiltered * correction

# 验证内积是否近似相等
inner_product1 = np.vdot(sinogram, y)
inner_product2 = np.vdot(img, adjoint_result)
print(np.allclose(inner_product1, inner_product2, rtol=1e-3))  # 输出应为True

注意:不同版本的scikit-image可能对radon/iradon的内部归一化有细微调整,实际使用时建议对照Radon变换的数学定义,根据你的采样参数重新推导准确的缩放系数。

内容的提问来源于stack exchange,提问作者Dirk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:40:10