这是要求:输入是一个数字,它将图像分成几个相等的部分。例如,如果输入为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
我想允许用户输入介于2和255之间的值,然后自动生成与该输入对应的divide_thres
。如何重新编写此代码以提高效率?
答案 0 :(得分:7)
您的代码存在一些问题:
imgSize
除以相同的因子(而不是仅仅一次)。1 : colorLevel - 1
生成的矢量。由于可以从divide_thres
的值轻松计算得到的colorLevel
向量的长度,因此无需在if
语句中单独处理每个案例。
此外,即使您必须以不同的方式为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
答案 1 :(得分:1)
这应该这样做 -
divide_thres = [1:colorLevel-1]*round(imgSize/colorLevel)