从像素到毫米重新采样图像

时间:2014-02-25 19:38:04

标签: image matlab pixel resampling

我有一个图像(逻辑值),像这样

http://imageshack.com/a/img46/7493/cswr.png

我需要将此图像从像素重新采样到mm或cm;这是我用来重新取样的代码:

function [ Ires ] = imresample3( I, pixDim )

    [r,c]=size(I);
    x=1:1:c;
    y=1:1:r;
    [X,Y]=meshgrid(x,y);

    rn=r*pixDim;
    cn=c*pixDim;
    xNew=1:pixDim:cn;
    yNew=1:pixDim:rn;
    [Xnew,Ynew]=meshgrid(xNew,yNew);

    Id=double(I);

    Ires=interp2(X,Y,Id,Xnew,Ynew);

end

我得到的是黑色图像。我怀疑这段代码不是我想到的东西:它似乎只占用了图像的左上角。

相反,我想要的是以毫米/厘米的比例生成相同的图像:我期望的是每个白色像素应该从原始位置映射到新位置(以mm / cm为单位);发生的事情肯定不是我所期待的。

我不确定interp2是否是正确的命令。

我不想调整图片大小,我只是想从像素世界转到mm / cm世界。

pixDim当然是图像像素的尺寸,将耳朵的高度(以cm为单位)除以耳朵的高度(mm)(平均为0.019 cm)。

有什么想法吗?

编辑:我很确定代码没有任何意义,但是有人告诉我这样做......无论如何,如果我有两个耳朵,我首先需要扩展真实尺寸然后执行一些对他们的操作。我的意思是"真正的维度"如果一个尺寸为6.5x3.5cm而另一个尺寸为6x3.2cm,我需要对此尺寸执行操作。 在进行操作之前,我怎么能从像素尺寸移动到cm尺寸。 我想从一个世界移动到另一个世界,因为我想摆脱捕捉距离(因为我想如果耳朵的图片被拍到附近而另一个拍摄远处,它们的像素尺寸应该不同) 。 我对么?有办法吗?我以为我可以绘制缩放轴的耳朵,但是我想我不能从另一个中减去一个,对吧?

1 个答案:

答案 0 :(得分:3)

Matlab不使用单位。要应用0.019厘米/像素的因子,你必须按比例缩放0.019才能得到1厘米的网格,但这会导致任何小于1厘米的假象丢失。

最佳做法是使用多个轴显示数据,一个用于cm,一个用于像素。这里解释了:http://www.mathworks.de/de/help/matlab/creating_plots/using-multiple-x-and-y-axes.html

处理数据的任何函数都应该与比例无关,或者使用比例因子作为输入参数,其他一切都是一些严重的算法问题的标志。