How to vectorize this code to eliminate nested For loops?

Would like to know how this code is vectorized:
for r=1:rows
for c=1:cols
if ((Lin <= Limg(r,c)) && (Limg(r,c) <= Hin))
enhanceImg(r,c) = Lout + (Hout - Lout) * ((Limg(r,c) - Lin) / (Hin - Lin))^gamma;
elseif (Limg(r,c) > Lin)
enhanceImg(r,c) = Hout;
else
enhanceImg(r,c) = Lout;
end
end
end
Lin, Hin, Lout, Hout, gamma are scalar values.

1 件のコメント

Greg
Greg 2018 年 9 月 6 日
+1 for a very well formed question. Clear and concise, showed an attempt, and described relevant variable sizes.
That all makes it much easier to answer.

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

 採用された回答

Greg
Greg 2018 年 9 月 6 日
編集済み: Greg 2018 年 9 月 6 日

0 投票

Most of that is straightforward, just a couple elementwise periods for safety. Then, the hardest part is getting the logic to put the right values into your output matrix.
%%%Pre-allocate to Lout saves one round of comparison + assignment
enhancedImg = Lout.*ones(rows,cols);
%%%Build a mask for your first if condition
blnOne = (Lin <= Limg) & (Limg <= Hin);
%%%Assign the arithmetic result to elements behind that mask
enhancedImg(blnOne) = Lout+(Hout-Lout).*((Limg(blnOne)-Lin)./(Hin-Lin)).^gamma;
%%%Another mask for the elseif condition
blnTwo = Limg > Lin;
%%%Assign Hout to those elements
enhancedImg(blnTwo) = Hout;
%%%As mentioned above, all remaining elements are already Lout, so no "else" condition is needed
EDIT: Fixed Limg(blnOne) per first comment below.

4 件のコメント

Jae Min Lee
Jae Min Lee 2018 年 9 月 6 日
編集済み: Jae Min Lee 2018 年 9 月 6 日
enhancedImg(blnOne) = Lout+(Hout-Lout).*((Limg-Lin)./(Hin-Lin)).^gamma;
Thank you! However, I get the following error. " The value can not be assigned because the number of elements on the left and right sides is different."
Greg
Greg 2018 年 9 月 6 日
Sorry, see updated answer.
Jae Min Lee
Jae Min Lee 2018 年 9 月 6 日
Thank you very much!
Greg
Greg 2018 年 9 月 6 日
Happy to help.

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

その他の回答 (0 件)

質問済み:

2018 年 9 月 6 日

コメント済み:

2018 年 9 月 6 日

Community Treasure Hunt

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

Start Hunting!

Translated by