I have this for loop with conditionals inside it.
for i=1:m
for j=1:n
if (flipped_im(i,j,1)>flipped_im(i,j,2)) || (flipped_im(i,j,1)>flipped_im(i,j,3))
mod_im(i,j,:)=255;
else
mod_im(i,j,:)=flipped_im(i,j,:);
end
end
end
How I can turn this loop into vectorized code?

2 件のコメント

Stephen23
Stephen23 2019 年 3 月 14 日
"How I can turn this loop into vectorized code?"
Why do you need to do that?
Yaser Alghawi
Yaser Alghawi 2019 年 3 月 14 日
It is an assignment. To optimize the speed of the program.

サインインしてコメントする。

 採用された回答

Stephen23
Stephen23 2019 年 3 月 14 日
編集済み: Stephen23 2019 年 3 月 14 日

1 投票

In three lines, no loop:
>> new_im = flipped_im;
>> idx = new_im(:,:,1)>new_im(:,:,2) | new_im(:,:,1)>new_im(:,:,3);
>> new_im(idx(:,:,[1,1,1])) = 255;
and checking:
>> isequal(mod_im,new_im)
ans = 1
For MATLAB versions R2016b and later you can simplify the index code:
idx = any(new_im(:,:,1)>new_im(:,:,2:3),3);

1 件のコメント

Jan
Jan 2019 年 3 月 14 日
Or in < R2016b:
idx = any(new_im(:,:, [1, 1]) > new_im(:,:, 2:3), 3);

サインインしてコメントする。

その他の回答 (1 件)

Yaser Alghawi
Yaser Alghawi 2019 年 3 月 14 日

0 投票

Thank you Chris and Jan. It did the trick.

1 件のコメント

Stephen23
Stephen23 2019 年 3 月 14 日
Who is Chris?

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeLoops and Conditional Statements についてさらに検索

タグ

質問済み:

2019 年 3 月 14 日

コメント済み:

2019 年 3 月 14 日

Community Treasure Hunt

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

Start Hunting!

Translated by