这是要求:输入是一个数字,它将图像分成几个相等的部分.例如,如果输入为4,则返回3个部分:值为imgSize/4 imgSize/4 * 2和imgSize/4 * 3.
如果输入是n,则它将返回n - 1元素,如以下实现中所示:
if (colorLevel == 8)
divide_thres = [ round(imgSize/8) round(imgSize/8)*2 round(imgSize/8)*3 round(imgSize/8)*4
round(imgSize/8)*5 round(imgSize/8)*6 round(imgSize/8)*7 ];
elseif (colorLevel == 4)
divide_thres = [ round(imgSize/4) round(imgSize/4)*2 round(imgSize/4)*3 ];
elseif (colorLevel == 3)
divide_thres = [ round(imgSize/3) round(imgSize/3)*2 ];
end
Run Code Online (Sandbox Code Playgroud)
我想允许用户输入介于2和255之间的值,然后自动生成divide_thres与该输入相对应的值.如何重新编写此代码以提高效率?
您的代码有几个问题:
imgSize多次除以相同的因子(而不是仅仅一次).1 : colorLevel - 1.因为divide_thres可以从值中容易地计算得到的向量的长度colorLevel,所以不需要在if语句中单独处理每个案例.
而且,即使你必须以不同的方式计算case imgSize= 3,4和的长度8,你最好还是使用switch语句而不是if语句,因为前者会省去你imgSize == ...每次写的麻烦,这是容易出错和一种代码重复的形式.
这是一个非常简化的方法:
if 2 <= colorLevel && colorLevel <= 255
divide_thres = round(imgSize / colorLevel) * (1 : colorLevel - 1);
else
error('invalid colorLevel value') % (or some other informative message)
end
Run Code Online (Sandbox Code Playgroud)