How can I vectorize/LUT this for loop ?

2 Ansichten (letzte 30 Tage)
Louis
Louis am 12 Feb. 2013
Hello,
I have been dabbling trying to make a look-up table mapping for this tedious for-loop but I wasn't successful. Here is the code and explanation of what I am trying to do:
for kk=1:size(aa,1)
imageModified(aa(kk,1),aa(kk,2))=img(aa(kk,3),aa(kk,4));
end
My 'kk' is in order of millions for this loop is somehow time consuming.
Basically, I have a matrix called 'aa'.
'aa' is some Nx4 matrix where each row has mapping values.
What I want to do is going through row by row of matrix 'aa' and map image value 'img' to its corresponding place in image 'imageModified'.
For example,
Let's say aa=[ 50 40 60 70 ; 2 56 28 10 ; .... ]
So what I want to do is: map img(50,40) value to location imgModified(60,70). Map map img(2,56) value to location imgModified(28,10). And do that for 'aa' N rows.
Thank you in advance,

Akzeptierte Antwort

Sven
Sven am 12 Feb. 2013
Bearbeitet: Sven am 12 Feb. 2013
Hi Louis,
This one's got a nice solution using sub2ind that lets you do the whole thing at once without a loop:
img = rand(100,100)
imgModified = zeros(size(img))
aa = [ 50 40 60 70 ; 2 56 28 10]; % etc
imgInds = sub2ind(size(img),aa(:,1),aa(:,2))
modInds = sub2ind(size(img),aa(:,3),aa(:,4))
imgModified(modInds) = img(imgInds)
Does that end up with what you intended?
  2 Kommentare
Louis
Louis am 12 Feb. 2013
Bearbeitet: Louis am 12 Feb. 2013
Awesome. Thank you very much, Sven. Time down from 22 seconds to 0.2 seconds :)
Sven
Sven am 12 Feb. 2013
No problems, you get a vote for writing a nice clear question with example code :)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Geometric Transformation and Image Registration finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by