2012-01-04 111 views
3

我有一个二进制图象如在下面图中,在Matlab中,如何在二维坐标系中扫描二维图像,并将其旋转45度,以实际坐标系?

enter image description here

在x-y坐标系是随MATLAB默认坐标系。我能够获得x-y坐标系中每行和每列的像素总和。

但我通过U-V坐标系步进想要的像素的总和。我怎么才能得到它?

我的想法是

1)在xy坐标系转换为连续的(实值)坐标系 2)求出在XY内的点的坐标对应于在UV坐标的各点系统。像u-v中的(1,1)对应于x-y中的(1.26,1.45)。 3)获得u-v坐标中的行和列的总和。

在这方面, 1)创建空间坐标系并将像素坐标系转换为空间坐标系的方法是什么? 2)如何获得空间坐标系中分数像素的值?

谢谢。

回答

1

如果你真的只想正好45度对角线,你的像素是正方形(安全的假设与大多数标准摄像机),那么你并不真正需要做的任何坐标变换,我不认为。你可以使用这样的事实,即沿着对角线的所有点都具有例如I(ix, ix), I(1 + ix, ix)。解决这个限制有点棘手。试试这个为“列”(左底部对角线从右上方)资金,开始在左下,连升左边缘,然后在顶部:

I = eye(5, 4); 
I(4, 1) = 1; 

[nrows, ncols] = size(I); 
colsums = zeros(nrows + ncols - 1, 1); 

% first loop over each row in the original image except the first one 
for ix = nrows : -1 : 2, 
    JX = [0 : min(nrows - ix, min(nrows-1, ncols-1))]; 
    for jx = JX, 
     colsums(nrows - ix + 1) = colsums(nrows - ix + 1) + I(ix + jx, jx + 1); 
    end 
end 

% then loop over each column in the original image 
for ix = 1 : ncols, 
    JX = [0 : min(nrows - ix - 1, min(nrows-1, ncols-1))]; 
    for jx = JX, 
     colsums(nrows + ix - 1) = colsums(nrows + ix - 1) + I(1 + jx, ix + jx); 
    end 
end 

注意,如果距离对你很重要(有点听起来好像没有),那么沿着这些对角线的距离是sqrt(2)/2更长。

+0

非常感谢。我认为这正是“氡”功能所做的。这帮助我理解了我在“氡”功能中不理解的东西。 – Sulla 2012-01-05 10:30:20

0

我会用meshgrid产生坐标系的图像。您可以通过矩阵乘法将此坐标系旋转rotation matrix。这应该给你变换的坐标,但你需要从他们的价值观,因为你说他们将是分数像素。您需要确定插值的最佳方法。一种方法是只使用最近像素(最近邻居)的值。线性插值通常会给出更好的结果 - 取相邻像素并将它们相加,然后通过与目标坐标的接近程度进行加权。如果结果不令人满意,我只会打扰更高阶的插值方法。


您提出的方法另一种方法是使用imrotate用45度旋转变换的图像,然后计算出你感兴趣的列中的垂直像素线积分(总和)。

+0

问题与 “imrotate” 方法是,它引入了空白像素作为结果的旋转。由于在边缘引入这些空白像素,线积分总和给出误导信息。 – Sulla 2012-01-04 22:07:43

+0

但空白像素不会影响总和,因为它们都为零。 – aganders3 2012-01-04 22:22:34

+0

会影响我的计算,因为我对具有最小像素值的行和列感兴趣。由于“imrotate”引入了空行和列,这将成为我的最小行/列。 – Sulla 2012-01-04 22:35:56

1

只需使用氡变换角度45135。 它会给你正是你需要什么。
特定角度的像素总和。

http://en.wikipedia.org/wiki/Radon_transform

I = checkerboard(10,10); 
figure;imshow(I) 
R = radon(I,[45 135]); 
figure;plot(R(:,1)) 

下面是解释氡一些图像变换

Image taken from wikipedia

Image taken from Matlab help

+0

谢谢。我确实发现早先的答案是氡实现。但我正在搞单位。 1/sqrt(2)的长度和实现我自己给了我一个清晰的理解。 – Sulla 2012-01-05 10:33:30

相关问题