这是一个比较双重与im2double的基准代码,即使它们不一定产生与其他解决方案中所解释的相同的结果 –
N_arr = [100 200 500 1000 2000 4000]; %// datasize array
timeall = zeros(4,numel(N_arr));
for k1 = 1:numel(N_arr)
rgb_img = uint8(randi([0 255],N_arr(k1))); %// Input to functions
f = @() double(rgb_img);
timeall(1,k1) = timeit(f);
clear f
f = @() im2double(rgb_img);
timeall(2,k1) = timeit(f);
clear f
end
figure,hold on,grid on
plot(N_arr,timeall(1,:),'-ro'),plot(N_arr,timeall(2,:),'-kx')
legend('DOUBLE','IM2DOUBLE'),
xlabel('Datasize ->'),ylabel('Time(sec) ->')
结果 –
现在,这是有道理的,因为内部im2double调用加倍.
现在,假设您正在处理uint8图像,要使用double具有相同的功能,您需要在之后将其缩小.所以你需要相应地编辑函数句柄 –
f = @() double(rgb_img)./255;
情节结果是 –
所以,现在显然差别不大.