首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在matlab中构造累加器数组

如何在matlab中构造累加器数组
EN

Stack Overflow用户
提问于 2012-12-03 01:01:44
回答 2查看 3.3K关注 0票数 0

我是matlab的新手,如果这是一个愚蠢的问题,我很抱歉。我必须使用下面的矩阵:

代码语言:javascript
复制
im = imread('image.jpg');  %<370x366 double>
[y,x] = find(im); %x & y both <1280x1 double>
theta;  %<370x366 double> computed from gradient of image

我现在可以像这样一次绘制一个点:

代码语言:javascript
复制
plot(x(502) + 120*cos(theta(y(502),x(502))),y(502) + 120*sin(theta(y(502),x(502))));

但是我想要做的是如何递增一个累加器数组,我想在每次找到acc位置的值的时候,递增1。

因此,如果x(502) + 120*cos(theta( y(502),x(502)),y(502)+ 120*sin(theta(y(502),x(502))= (10,10),则acc(10,10)应该递增1。我正在处理一个非常大的数据集,所以我想避免for循环,并使用如下内容:

代码语言:javascript
复制
acc = zeros(size(im));
%increment value when point lands in that location
acc(y,x) = acc(x + 120*cos(theta(y,x)),y + 120*sin(theta(y,x)),'*b')) + 1;

如果120实际上也是包含不同半径值的另一个矩阵,那就太好了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-03 01:53:15

代码语言:javascript
复制
i = find(im);

而不是

代码语言:javascript
复制
[y,x] = find(im)

这将给出非零值的线性指标。

另外,创建一个网格

代码语言:javascript
复制
[x,y] = meshgrid(1:366,1:370)

现在,您可以对协调和值进行线性索引,例如

x(520)是第520点的x坐标

im(520)是第520点灰度值

theta(520)是第520个梯度值

因此,现在您只需绘制它:

代码语言:javascript
复制
plot(x(i) + 120*cos(theta(i)),y(i) + 120*sin(theta(i)),'b*');

x(i)表示第i个值的列

x(i) + 120*cos(theta(i))表示一列结果

累加

我认为在这种情况下,循环累加是可以的:

代码语言:javascript
复制
acc=zeros(size(im));
for ii=1:length(i)
    xx=round(x(ii) + 120*cos(theta(ii)));
    yy=round(y(ii) + 120*sin(theta(ii)));
    acc(xx,yy)=acc(xx,yy)+1;
end;
票数 1
EN

Stack Overflow用户

发布于 2012-12-03 02:58:57

factor (在示例中为120)可以是im大小或标量大小的矩阵。.*可以做到这一点。

代码语言:javascript
复制
im = imread('image.jpg');
[y, x] = meshgrid(1 : size(im, 1), 1 : size(im, 2));
factor = 120 * ones(size(im)); 
theta = gradient(double(image)); % just for example

acc = zeros(size(im));

increment = ((x + factor .* cos(theta)) == 10) &  ((y + factor .* sin(theta)) == 10);
acc = acc + increment;

但与10的比较很少是真的,因此您需要允许一定的范围。例如(9,11)

代码语言:javascript
复制
e = 1;
increment = abs((x + factor .* cos(theta)) - 10) < e &  abs((y + factor .* sin(theta)) - 10) < e;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13671536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档