【问题标题】:Backprojection from projection matrix using MATLAB使用 MATLAB 从投影矩阵进行反投影
【发布时间】:2012-04-24 04:50:18
【问题描述】:

我有一个 256x256 的投影矩阵。每行都是以相等角度拍摄的投影。我需要使用 matlab 生成带有反投影的原始图像,我对 matlab 并不熟悉。你能建议我任何代码示例或算法吗?我发现了一些类似的代码,我无法使用它们生成原始图像。

【问题讨论】:

    标签: matlab projection-matrix


    【解决方案1】:

    如果您有图像处理工具箱,使用iradon 命令应该相对简单。如果你不这样做,它会有点困难,因为你需要推出你自己的版本。显然你不能使用它,但是如果我使用它,我会得到一张图片:

    I = iradon(Pteta',linspace(0,179,size(Pteta,1));
    

    那么,你自己怎么做呢?我会尽力帮助你,但不给你答案——这毕竟是功课!

    首先,考虑一下您的 0 度投影。想象一下您投影的轴有 1,256 个单位。现在想象这些坐标在你的图像上的反向投影,它看起来像这样:

    类似地,想象一个 90 度的投影应该是这样的:

    酷,我们可以使用[X, Y] = meshgrid(1:256); 获得这些矩阵,但是离轴投影呢?想想沿某个角度线的距离,例如转换极坐标/笛卡尔坐标:

    theta = 45 % projection angle in degrees
    t = X*cosd(theta) + Y*sind(theta);
    

    而且它有效!

    但是有一个问题!注意到现在值上升超过 350 了吗?它也有点偏离中心。现在坐标超过了我们投影的长度,因为正方形的对角线比边长。我会留给你来弄清楚如何解决这个问题,但最终图像会比初始投影小,你可能需要使用不同的单位(-127 到 128 而不是 1 到 256)。

    现在,您只需索引这些角度的投影,即可在图像上反向投影实际值。但是,这里还有第二个问题,因为这些值不是整数!我们可以对它们进行四舍五入,这称为最近邻插值,但它并没有给出最好的结果。

    proj = Pteta(angle,:);
    % add projection filtering here
    t = X*cosd(theta) + Y*sind(theta);
    % do some rounding/interpolating to make t all integers
    imagesc(proj(t));
    

    对于我们的偏心版本,这给了我们这个图像,或者类似的东西:

    现在您只需要对每个角度都执行此操作,然后将它们全部加起来。

    【讨论】:

    • 虽然我不允许使用 iradon 命令,但我试过它给了我一些随机图像。我需要获得真实物体的图像,例如汽车或树。和角度跨度 [0,pi] 如果有帮助,这里是矩阵:mediafire.com/?rn6j2h7rbkje3oe
    • 听起来这是给你的作业,所以我添加了那个标签。您了解反投影的一般工作原理(即在纸上)吗?
    • 好的,我刚刚打开了你的投影矩阵——这是扇形光束数据吗?
    • 是的,这是我的作业,实际上只是我作业的一部分。我需要过滤反投影和卷积反投影,但如果我知道反投影如何在 matlab 上工作,我想我可以做到。而且我了解反投影的工作原理,但这是我第一次使用 matlab。编辑:是的,它就像扇形光束数据。
    • 很抱歉造成混乱,但它不是扇形光束。我不知道如何用英语来描述它,但它就像这里的那个:clear.rice.edu/elec431/projects96/DSP/bpanalysis.html
    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 2015-04-11
    • 2015-11-01
    • 2019-03-05
    • 2015-02-06
    • 2011-08-31
    • 2013-05-14
    • 1970-01-01
    相关资源
    最近更新 更多