I have a simple problem that I'm looking for a fast implementation in Matlab. I have an array of values, let's say:
a = floor(rand(5,5).*255)
I then have a similarly sized threshold array, let's say it's:
a_thresh = floor(rand(5,5).*255)
For values within a
if they are 0.5x smaller than the corresponding value in a_thresh
I want the output to be 0 - similarly for 1.2x the value in a_thresh
should also be set to zero, i.e.:
a(a < a_thresh.*0.4) = 0
a(a > a_thresh.*1.2) = 0
For values between 0.4x and 0.5x and 1.0x and 1.2x I want a proportional amount and else where between 0.5 and 1.0 I want to use the value of a
unaltered. I thought I could use something like the following:
a(a>= a_thresh .* 0.4 && a <a_thresh.* 0.5) = ((a - a_thresh.*0.4)/(a_thresh.*0.5 a_thresh.*0.4)) .* a;
However, I get an error that says:
Operands to || and && operations must be convertible to logical scalar values
Any advice on how to solve this? Obviously I could use loops to do this and it would be trivial, but I want to keep the code vectorized.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…