不考虑循环的Matlab公式优化

不考虑循环的Matlab公式优化,matlab,computer-vision,vectorization,hough-transform,Matlab,Computer Vision,Vectorization,Hough Transform,我正在尝试实现Hough变换算法。算法可行,但速度很慢。 目前,我通过两个for循环计算rho: 对于i=1:长度(x) 结束 我如何简化它,在没有for循环的情况下工作? 我需要计算没有回路的ro,但我如何计算,以覆盖所有可能的θ 编辑:现在我需要知道如何在给定x和y坐标向量的累加器矩阵中向指定的单元格添加1。例如,假设我有如下向量: x:[1 2 1 3] y:[1 3 1 4] 我想解决这个问题,不需要循环。我知道我需要使用sub2ind转换为线性索引,但问题是会有很多相同的线性索引,例

我正在尝试实现Hough变换算法。算法可行,但速度很慢。 目前,我通过两个for循环计算rho:

对于i=1:长度(x)

结束

我如何简化它,在没有for循环的情况下工作? 我需要计算没有回路的ro,但我如何计算,以覆盖所有可能的θ


编辑:现在我需要知道如何在给定x和y坐标向量的累加器矩阵中向指定的单元格添加1。例如,假设我有如下向量:

x:[1 2 1 3]
y:[1 3 1 4]

我想解决这个问题,不需要循环。我知道我需要使用sub2ind转换为线性索引,但问题是会有很多相同的线性索引,例如我给出的,会有2x1(1,1坐标重复两次)。如果您尝试添加1,则如下所示:

A([11])=A([11])+1


它只会加1一次,这是我的问题。

假设
x
y
是行向量,您可以使用以下代码预先计算2D矩阵中的所有
ro
值,这有望在嵌套循环中为您加快速度,以完成涉及
ro
值的其余工作-

theta_vec = [-pi/2:nBinsTheta:pi/2-nBinsTheta].'; %//'
ro_vals = round( cos(theta_vec)*x + sin(theta_vec)*y );
你真的需要
j


PS:前面的答案可能不起作用,因为矩阵乘法运算符
*
而不是元素
*

中的
j
有什么用?j是为了在累加器数组中为θ取适当的值来进行表决。您能格式化编辑部分吗?现在很难理解,在我的解决方案(另一个)中,我使用两个向量的矩阵乘法,得到一个二维矩阵(如图所示)。也就是说,它就像是
Nx1
乘以
1xM
,这不是元素乘法,而是矩阵乘法,在这些嵌套循环中产生与
ro
相同的值。所以,这应该行得通:)谢谢你的想法,现在我有了一个新问题。我需要为每个θρ值向累加器数组中添加1。问题是,我需要在累加器矩阵中的同一个单元格中多次添加1,而matlab的代码有问题,例如:A([11])=A([11])+1,它只添加1次。我的问题是当我说A(rho(:),θ(:)=A(rho(:),θ(:)+1;有很多重复的菱形和θ,因此不能正确地多次添加1。我怎样才能以不同的方式做到这一点?θ和ρ在适当的间隔之前被离散…@EWER115很难通过注释读取代码。你能用这些额外的细节和代码编辑这个问题吗?
theta_vec = [-pi/2:nBinsTheta:pi/2-nBinsTheta].'; %//'
ro_vals = round( cos(theta_vec)*x + sin(theta_vec)*y );
assert(all(size(x) == size(y)), 'dimension mismatch: x, y')

theta = (-pi/2:nBinsTheta:pi/2-nBinsTheta)';

assert(all(size(theta) == size(y)), 'dimension mismatch: theta, y')

rho = x.*cos(theta) + y.*sin(theta);

rho_rounded = round(rho);