Vectorisation for nested for loops in Piecewise Linear Transformation

4 views (last 30 days)
Hi everyone,
I'm trying to remove the for loops in this piecewise linear transformation function and have tried using vectorisation but can't wrap my head around how the code would look.
for i = 1:size(original,1)
for j = 1:size(original,2)
if (original(i,j) < x1)
transformed(i,j) = m1 * original(i,j);
elseif (original(i,j) >= x1 && original(i,j) < x2)
transformed(i,j) = m2 * (original(i,j) - x1) + y1;
transformed(i,j) = m3 * (original(i,j) - x2) + y2;
Is there any way I can do a piecewise linear transformation (contrast stretching) without the nested for loop to speed up the execution?

Accepted Answer

Voss on 10 Nov 2022
transformed = original;
idx = original < x1;
transformed(idx) = m1 * original(idx);
idx = original >= x1 & original < x2;
transformed(idx) = m2 * (original(idx) - x1) + y1;
idx = original >= x2;
transformed(idx) = m3 * (original(idx) - x2) + y2;

More Answers (0)


Find more on Mathematics and Optimization in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!