Pythonは離散ラドン変換を実装します



Python Implements Discrete Radon Transform



最近の仕事ではラドン変換を使用する必要があるため、関連するコンテンツを学習しただけです。インターネット上にはラ​​ドン変換に関する紹介がたくさんあります。自分で見つけることができます。繰り返しませんが、多くの人がMATLABで直接使用しています。 ラドン() この変換を完了するための関数であり、私のグループはMATLABを購入しなかったため、MATLABを直接使用することには著作権のリスクがあるため、実装にPythonを使用することのみを検討し、ソースコードといくつかの結果を投稿して共有および議論します。

from scipy import ndimage import numpy as np import matplotlib.pyplot as plt import imageio from cv2 import cv2 def DiscreteRadonTransform(image, steps): res = np.zeros((steps, len(image[0])), dtype='float64') for s in range(steps): rotation = ndimage.rotate(image, -s*180/steps, reshape=False).astype('float64') #print(sum(rotation).shape) res[:,s] = sum(rotation) return res #Read picture #image = cv2.imread('straightLine.png', cv2.IMREAD_GRAYSCALE) #image = cv2.imread('whiteLineModify.png', cv2.IMREAD_GRAYSCALE) image=imageio.imread('shepplogan.jpg').astype(np.float64) radon = DiscreteRadonTransform(image, len(image[0])) #Draw the original image and the corresponding sinogram graph plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.subplot(1, 2, 2) plt.imshow(radon, cmap='gray') plt.show()

ラドン変換は医用画像(CT)や直線検出でよく使われるため、コードを確認する際に、元の画像を2枚使用しました。1枚はシェップローガンモデルの画像、もう1枚は直線が1枚しかない画像です。具体的な結果は次のとおりです。
シェップ-ローガンラドン、、シノグラム。
上記は私のテストの結果です。左の元の画像と右の画像は、左の画像のラドン変換の結果です。私の視覚的観察によると、得られた結果は、MATLABの他のユーザーによって直接使用されます。 ラドン() 関数の結果は同じです。何か問題がある場合は、批判して訂正することを歓迎します。