3
$\begingroup$

I need a function point2line to convert a point in the Radon Transform Space to a straight line.

But I don't know the algorithm inside mathematica, I don't know what kind of transformation is.

For example, a point $(42, 42)$ in the $100 \times 360$ of the Radon Space, the inverse of the corresponding line can probably be measured as such:

point = Image[Normal@SparseArray[{{42, 42} -> 1}, {100, 360}]]
line = InverseRadon[point]
pixel = PixelValuePositions[line, White, 1];
f = LinearModelFit[pixel, x, x]
HalfLine@Round[{#, f[#]} & /@ {0, First[ImageDimensions@line]}]

I want to know if there are any formulas that can help me to do this.

point2line[{x,y},{w,h}] -> HalfLine[{{0, y1}, {x2, y2}}]

$\endgroup$
2
$\begingroup$

Here is my second attempt. With this code, I'm able to reproduce the result of InverseRadon up to a small offset:

{x, y} = {80, 330};
point = Image[Normal@SparseArray[{{x, y} -> 1}, {100, 360}]];
line = InverseRadon[point, {400, 400}];
pixel = PixelValuePositions[line, White, 1];

{h, w} = {100., 360.};
norm = 400;

d = Rescale[x, {0, h}, {norm/Sqrt[2.], -norm/Sqrt[2.]}];
th = Rescale[y, {0, w}, {-Pi/2., Pi/2.}];
HighlightImage[
 line, {
  PointSize[Large], Red, Point[{norm, norm}/2.],
  Line[{{norm, norm}/2, {norm, norm}/2 + d {Cos[th], Sin[th]}}],
  InfiniteLine[{norm, norm}/2 + d {Cos[th], Sin[th]}, {Cos[Pi/2 + th],
     Sin[Pi/2 + th]}]
  }]

Mathematica graphics

$\endgroup$
  • $\begingroup$ I have some minor problem. Can you run this test LineWebPainting/NextVer? This refactoring seems sometimes to be incorrect. $\endgroup$ – GalAster Oct 7 '19 at 4:15
  • $\begingroup$ @GalAster You are right, it was wrong. My new attempt should be more correct. You can play with x and y for some values and see that there seems to be only a small constant offset. Where that offset comes from, I've yet to figure out. Note that I set the size of the output to 400 to avoid any errors coming from the algorithm itself determining the size of the output. $\endgroup$ – C. E. Oct 7 '19 at 19:20
  • 1
    $\begingroup$ btw the $\sqrt{2}$ comes from the length from the center to one of the corners of a square: $d = \sqrt{2(x/2)^2} = x/\sqrt{2}$, so it assumes that the output is a square. $\endgroup$ – C. E. Oct 7 '19 at 19:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.