Mapping a plane onto a 3D matrix?

4 ビュー (過去 30 日間)
Naim
Naim 2017 年 8 月 16 日
コメント済み: José-Luis 2017 年 8 月 16 日
I have an empty 256x256x56 matrix I want to project onto
I have with two points of interest (156.66,114.66,32.66) and (132.33,122.33,30.33). The plane I want to define is orthogonal to these two points and lies on the first point. The normal vector created by these two points are (-24.33,7.66,-2.33). I then found the D value of 3.0093e+03 to satisty a*x+b*y+c*z+d=0 with (a,b,c) being my first value (156.66,114.66,32.66).
All that being said, I'm trying to map this plane onto my empty matrix. It would need to be the best approximation, as the matrix is discrete. Any ideas about the some next steps? I would love to hear some suggestions.
  3 件のコメント
Guillaume
Guillaume 2017 年 8 月 16 日
@José-Luis,
For lines (on a 2d plane) this usually results in very poorly rendered lines (with holes in parts, double thickness in others). It's also extremely slow.
But yes, if nothing more clever exists, that's the easy way to do it.
José-Luis
José-Luis 2017 年 8 月 16 日
Thanks for the clarification.
Not really my field.

サインインしてコメントする。

採用された回答

Guillaume
Guillaume 2017 年 8 月 16 日
The correct way to get the best approximation would be to find an equivalent to Bresenham's line algorithm (or Wu's or similar) that apply to planes/voxels instead of lines/pixels. I'm not enough into this field to know if one exists.
A cheap way would be to use your plane equation with a small tolerance to find the voxels close to your plane:
matrix = zeros(256,256,256)
[y, x, z] = ndgrid(1:size(matrix, 1), 1:size(matrix, 2), 1:size(matrix, 3));
onplane = abs(a*x+b*y+c*z+d) <= tolerance
yourmatrix(onplane) = 1;
I suspect this may leave some holes (too small a tolerance) or result in too thick a plane in some places (too high a tolerance).

その他の回答 (0 件)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by