I’m very new to matlab so sorry if this is a dumb question. I have to following matrices:
im = imread('image.jpg'); %<370x366 double>
[y,x] = find(im); %x & y both <1280x1 double>
theta; %<370x366 double> computed from gradient of image
I can currently plot points one at a time like this:
plot(x(502) + 120*cos(theta(y(502),x(502))),y(502) + 120*sin(theta(y(502),x(502))));
But what I want to do is some how increment an accumulator array, I want to increment the location of acc by 1 for every time value for that location is found.
So if x(502) + 120*cos(theta(y(502),x(502))),y(502) + 120*sin(theta(y(502),x(502)) = (10,10) then acc(10,10) should be incremented by 1. I’m working with a very large data set so I want to avoid for-loops and use something like this:
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;
It would be nice if the 120 could actually be another matrix containing different radius values as well.
Do
instead of
wthis will give you linear indice of non zero values
Also, create a meshgrid
Now you can index both coordinated and values linearly, for example
x(520)is 520-th point x coordinateim(520)is 520-th point gray valuetheta(520)is 520-th gradient valueSo, now you can just plot it:
x(i)means a column of i-th valuesx(i) + 120*cos(theta(i))means a column of resultsACCUMULATING
I think in this case it is ok to loop for accumulating: