<div dir="ltr"><div>Hi qod rec,</div><div>1. The projection is limited by the size of your input volumes. With such a large source to object distance (10 m), you're almost parallel so what you see should correspond to the size of a coronal slice of your volume.</div><div>2. constantImageSource creates an image (here filled with the constant value 0). The meaning is described in the ITK software guide, <a href="https://itk.org/ITKSoftwareGuide/html/Book1/ITKSoftwareGuide-Book1ch4.html#x45-54001r1">figure 4.1</a>. Your input image has a negative spacing which is transferred to the direction matrix.</div><div>3. There is also a projection matrix. So you mutiply a 3D point in homogenous coordinates (4 values x y z 1) you get a 2 2d point in homogenous coordinates (3 values u v w). your coordinate is u/w and v/w. It works in physical coordinates.</div><div>Simon<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Sep 23, 2022 at 2:53 AM qod rec <<a href="mailto:recqod@gmail.com">recqod@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hello!<div>I have some 3d chest CTs and its lung contour is labeled. I generate the contour meshes and want to project their vertices (points) onto the DRR.</div><div>I use the following parameters to generate DRR using JosephForwardProjectionImageFilter in RTK.</div><div><br></div><div># Input</div><div>inputVolume = itk.imread('chest.nii')<br>inputVolume = inputVolume.astype(itk.F)<br></div><div>volumeSpacing = inputVolume.GetSpacing()<br>volumeOrigin = inputVolume.GetOrigin()<br>volumeDirection = inputVolume.GetDirection()<br>volumeShape = inputVolume.shape</div><div><br>volumeDirection = itk.array_from_matrix(volumeDirection)<br></div><div>print(volumeSpacing)<br>print(volumeOrigin)<br>print(volumeDirection)<br>print(volumeShape)<br></div><div><pre style="font-family:"Source Code Pro","Noto Mono","SF Mono","Roboto Mono",ui-monospace,monospace,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji",emoji;border:medium none;margin-top:0px;margin-bottom:0px;padding:0px;overflow:auto;word-break:break-all;white-space:pre-wrap">itkVectorD3 ([0.810547, 0.810547, 1])
itkPointD3 ([-213.107, 206.892, -220.053])
[[ 1.  0.  0.]
 [ 0. -1.  0.]
 [ 0.  0.  1.]]
(301, 512, 512)</pre></div><div><br></div><div># Geometry<br>geometry = rtk.ThreeDCircularProjectionGeometry.New()<br>numberOfProjections = 1<br>sid = 10000 # source to isocenter distance<br>sdd = 20000 # source to detector distance<br>gantryAngle = 0. # rot around y-axis<br>projOffsetX = 0.<br>projOffsetY = 0.<br>outOfPlaneAngle = 90. # rot around x-axis<br>inPlaneAngle = 0. # rot around z-axis<br>sourceOffsetX = 0.<br>sourceOffsetY = 0. <br>geometry.AddProjection(sid, sdd, gantryAngle, projOffsetX, projOffsetY, outOfPlaneAngle, inPlaneAngle, sourceOffsetX, sourceOffsetY)<br></div><div><br></div><div># Create a stack of empty projection images<br>ConstantImageSourceType = rtk.ConstantImageSource[OutputImageType]<br>constantImageSource = ConstantImageSourceType.New()<br>origin = [-511, -511, 0]<br>sizeOutput = [512, 512, 1]<br>spacing = [2, 2, 1]<br>constantImageSource.SetOrigin(origin)<br>constantImageSource.SetSpacing(spacing)<br>constantImageSource.SetSize(sizeOutput)<br>constantImageSource.SetConstant(0.)<br></div><div><br></div><div>Finally I get this DRR looks like a front-view one:</div><div><img src="cid:ii_l8d1e4sn0" alt="image.png" width="543" height="535"><br></div><div>Here are my questions:</div><div>1. I thought I would get a 512x512 full DRR with no backgrounds, just like normal x-ray, how can I fix it?</div><div>2. What's the meaning of constantImageSource's parameters? If I set these origin, spacing and size just like my input volume, I got DRR nowhere or too big to display.</div><div>3. I have read the geometry doc, and my understanding about its projection matrix is that the matrix is a translation matrix multiply rotation matrix. Since it is a 3x4 matrix, if I multiply a 3d point in homogeneous coordinates, the point will be project to a 2d point, right? What is the 2d coordinate? What coordinate system should I multiply the projection matrix on? Physical coordinate or Voxel coordinate?</div><div><br></div><div>Thank you so much for reading and answering my long-winded questions.</div></div>
<br>
_______________________________________________<br>
Rtk-users mailing list<br>
<a href="mailto:Rtk-users@public.kitware.com" target="_blank">Rtk-users@public.kitware.com</a><br>
<a href="https://public.kitware.com/cgi-bin/mailman/listinfo/rtk-users" rel="noreferrer" target="_blank">https://public.kitware.com/cgi-bin/mailman/listinfo/rtk-users</a><br>
</blockquote></div>