Hi All,<br><br><div class="gmail_quote">On Jan 29, 2008 9:23 PM, Rupert Brooks &lt;<a href="mailto:rupe.brooks@gmail.com">rupe.brooks@gmail.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi Andreas,<br><br>This is an important issue, particularly for anyone attempting to do<br>subpixel accuracy registration. &nbsp;I also agree that the coordinate of a<br>pixel should be the center of that pixel. &nbsp;This is because I tend to<br>
think of images as sampled signals - ie functions convolved with PSF<br>and then a comb function - so they dont really have width as such. &nbsp;If<br>the coordinate is of the corner, for many reasons that you have<br>pointed out, it could lead to strange contradictions or shifts in the<br>
effective image position.<br></blockquote><div><br>I completely agree.. the &quot;pixel&quot; (or voxel) do not have even to be rectangular... or the same size of the Spacing. They could be tiny circles... or gaussians... or even tiny dots (dirac delta). E.g., in visualization, when you consider the common linear interpolation, they have a width of twice the Spacing (overlapping each other); considering bi-cubic or other kinds of interpolation (Lanczos, etc.), they are even larger.<br>
<br>I vote for the center-based location approach (rounding mode), but an easy way to switch to vertex-based should be available (maybe through a flag bit and a shift in the Origin), because there may be some applications where vertex-based information is more natural (finite elements, PDE, etc.).<br>
<br>As a note, there should always be an unambiguous (non-overlapping) pixel domain [e.g., equivalent to the Voronoi diagram]. Even in the center-based location, there are still an issue to be resolved: the domain of the boundary pixels.<br>
<br>For example, for a 3x3 image, origin (0.0, 0.0), spacing (1.0, 1.0), the domain of each pixel it would be something like this:<br><br>Pix [0,0]: [-Inf, -Inf] &lt;= x &lt; [0.5, 0.5]<br>Pix [1,0]: [-Inf, 0.5] &lt;= x &lt; [0.5, 1.5]<br>

Pix [2,0]: [-Inf, 1.5] &lt;= x &lt; [0.5, Inf]<br>

Pix [0,1]: [0.5, -Inf] &lt;= x &lt; [1.5, 0.5]<br>
Pix [1,1]: [0.5, 0.5] &lt;= x &lt; [1.5, 1.5]<br>

Pix [2,1]: [0.5, 1.5] &lt;= x &lt; [1.5, Inf]<br>


Pix [0,2]: [1.5, -Inf] &lt;= x &lt; [Inf, 0.5]<br>

Pix [1,2]: [1.5, 0.5] &lt;= x &lt; [Inf, 1.5]<br>


Pix [2,2]: [1.5, 1.5] &lt;= x &lt; [Inf, Inf]<br>



<br>Note that there are three options to the domain of the boundary pixels:<br>1) Extend them to infinity (as I did)<br>2) Extend them so that they have the same &quot;size&quot; of the inner pixels. In this case, the &quot;image domain&quot; would be (-0.5,-0.5) &lt;= x &lt; (2.5, 2.5)<br>
3) Extend them to half (or 1/4) the size of the inner pixels, towards them. In this case, the &quot;image domain&quot; would be (0.0, 0.0) &lt;= x &lt; (2.0, 2.0), but the boundary pixels would be at the *vertices* of their domains.<br>
<br>Here is a fixed-width font diagram exemplifying it:<br> </div></div><br><font face="courier new,monospace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp; (-0.5,2.5)&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; (2.5,2.5)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +.......+.......+.......+<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . [0,2].|.[1,2].|.[2,2] .<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp; .&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; .&nbsp;&nbsp; .<br>&nbsp;&nbsp; -----+-------+-------+-------+-----<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp; .&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; .&nbsp;&nbsp; .<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . [0,1] | [1,1] | [2,1] .<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp; .&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; .&nbsp;&nbsp; .<br>&nbsp;&nbsp; -----+-------+-------+-------+-----<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp; .&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; .&nbsp;&nbsp; .<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . [0,0].|.[1,0].|.[2,0] .<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +.......+.......+.......+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp; (-0.5,-0.5)&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; (2.5,-0.5)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br></font><br><br>Options 1 seems more natural to me, and it is explicit that this &quot;image domain&quot; (Infinity) does not correspond to the real &quot;image metrics&quot; (0.0, 0.0) to (3.0, 3.0).<br>
Option 2 seems natural too, but note that *many* people will assume that the &quot;image domain&quot; corresponds to the &quot;image metrics&quot;, i.e., the image domain to start at the Origin: (0.0, 0.0) to (3.0, 3.0) in this case. A solution would be to shift the Origin by (-0.5, -0.5), but then, again, we would be moving the information location from the center to the vertices ;).<br>
<br>Edson<br><br>