logo

줄리아, 매트랩 파이썬에서 라돈 변환 쓰는 법 📂단층촬영

줄리아, 매트랩 파이썬에서 라돈 변환 쓰는 법

줄리아1

단층촬영 패키지 Tomography.jl에서 radon()함수를 사용하면 된다.

  • radon(f, θ): f는 이미지, θ는 프로젝션 각도이다. 입력하지 않으면 기본적으로 0도에서 $\pi$까지 계산한다.
using Tomography
using Plots

# 팬텀 생성
f = phantom(256,2)

# 라돈 변환 계산
ℛf = radon(f)

# 그림 출력
h1 = heatmap(reverse(f, dims=1), size=(400,400));
h2 = heatmap(reverse(ℛf, dims=1), size=(400,400));
heatmap(h1, h2, size=(800,400))

Julia.png

환경

  • OS: Windows10
  • Version: Julia 1.7.1, Tomography 0.1.5

매트랩2

라돈변환 radon과 라돈역변환 iradon을 지원한다.

  • radon(P, theta): 팬텀 Ptheta 각도에 대한 라돈 변환을 반환한다. theta를 입력하지 않으면 0:179의 각도로 실행한다.
  • iradon(R, theta): 라돈변환은 각도를 대입하지 않아도 쓸 수 있지만 역변환은 반드시 각도를 대입해야한다.
p=phantom(); %팬텀 생성
Rp=radon(p); %라돈변환 계산
IRp=iradon(Rp,0:179); %라돈역변환 계산

%그림 그리기
figure()

%첫번째 그림 팬텀
subplot(2,2,1)
imagesc(p)
colorbar
title('Phantom')

%두번째 그림 라돈변환
subplot(2,2,2)
imagesc(Rp)
colorbar
title('Radon Transform of p')

%세번째 그림 라돈역변환
subplot(2,2,3)
imagesc(IRp)
colorbar
title('Reconstruction Image')

Matlab.png

환경

  • OS: Windows10
  • Version: R2020b

파이썬3

사이킷이미지 패키지 skimagetransform 모듈에서 radon, iradon 매트랩과는 다르게 변환과 역변환 모두 각도를 대입하지 않으면 0:179로 실행한다.

import matplotlib.pyplot as plt

from skimage.data import shepp_logan_phantom
from skimage.transform import radon, iradon

#Phantom 생성
p = shepp_logan_phantom() #default size=(400,400)

#라돈변환 계산
Rp = radon(p)

#라돈역변환 계산
IRp = iradon(Rp)

#그림 그리기
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(12, 4.5))

#첫번째 그림 Phantom
ax1.set_title("Phantom")
ax1.imshow(p)

#두번째 그림 라돈변환
ax2.set_title("Radon transform of p")
ax2.set_xlabel("Projection angle (deg)")
ax2.set_ylabel("Projection position (pixels)")
ax2.imshow(sinogram)

#세번째 그림 라돈역변환
ax3.set_title("Reconstruction Image")
ax3.imshow(IRp)

#그림 출력
fig.tight_layout()
plt.show()

Python.png

환경

  • OS: Windows10
  • Version: Python 3.9.2, scikit-image 0.18.1