Matlab 单一与单一差异?

Matlab 单一与单一差异?,matlab,image-processing,matrix,floating-point,Matlab,Image Processing,Matrix,Floating Point,当应用于灰度图像时,MATLAB中的im2single和single有什么区别 我正在做一些图像处理工作,发现将调用singleimage更改为im2singleimage使我的性能提高了三倍,我现在非常好奇这两者之间的区别 关于和的MATLAB文档在这一点上似乎没有帮助 与im2double类似,im2single实际上会规范化所有图像数据,使所有值都在0到1之间。在将图像保存到文件或使用imshow显示图像时,此缩放是获得正确行为所必需的 另一方面,single将简单地将图像数据转换为单一数

当应用于灰度图像时,MATLAB中的im2single和single有什么区别

我正在做一些图像处理工作,发现将调用singleimage更改为im2singleimage使我的性能提高了三倍,我现在非常好奇这两者之间的区别

关于和的MATLAB文档在这一点上似乎没有帮助

与im2double类似,im2single实际上会规范化所有图像数据,使所有值都在0到1之间。在将图像保存到文件或使用imshow显示图像时,此缩放是获得正确行为所必需的

另一方面,single将简单地将图像数据转换为单一数据类型,而不进行缩放

基准 你说单身比单身快。鉴于上述信息,这是不太可能的。我设计了一个基准来测试这两种不同大小的图像

function benchit()

    N = round(linspace(1, 10000, 20));

    times1 = zeros(size(N));
    times2 = zeros(size(N));

    for k = 1:numel(N)
        im = rand(N(k));
        times1(k) = timeit(@()im2single(im));
        im = rand(N(k));
        times2(k) = timeit(@()single(im));
    end

    figure
    p(1) = plot(N, times1, 'DisplayName', 'im2single');
    hold on
    p(2) = plot(N, times2, 'DisplayName', 'single');
    legend(p)

    xlabel('Image Size')
    ylabel('Execution Time (sec)')
end
与im2double类似,im2single将实际规范化所有图像数据,使所有值都介于0和1之间。在将图像保存到文件或使用imshow显示图像时,此缩放是获得正确行为所必需的

另一方面,single将简单地将图像数据转换为单一数据类型,而不进行缩放

基准 你说单身比单身快。鉴于上述信息,这是不太可能的。我设计了一个基准来测试这两种不同大小的图像

function benchit()

    N = round(linspace(1, 10000, 20));

    times1 = zeros(size(N));
    times2 = zeros(size(N));

    for k = 1:numel(N)
        im = rand(N(k));
        times1(k) = timeit(@()im2single(im));
        im = rand(N(k));
        times2(k) = timeit(@()single(im));
    end

    figure
    p(1) = plot(N, times1, 'DisplayName', 'im2single');
    hold on
    p(2) = plot(N, times2, 'DisplayName', 'single');
    legend(p)

    xlabel('Image Size')
    ylabel('Execution Time (sec)')
end

如果我使用的是8位图像,那么im2single是否等同于singleimage/255。它实际上与:im=singleimage-minimage:;im=im./maxim:;。它使用值本身来缩放数据,而不是数据类型。如果您需要使用某种方法进行规范化,我建议您改为手动进行。@suever非常有趣!你还知道为什么缩放可能会提高OP代码的性能吗?@Max我怀疑性能不是用timeit@suever使用timeit与tic toc的差异是否会大到可以得到因子3@卡拉西:您是否可以发布您观察到性能改进的代码?我想试试基准测试。如果我使用的是8位图像,那么im2single是否等同于singleimage/255?@kalaracey。它实际上与:im=singleimage-minimage:;im=im./maxim:;。它使用值本身来缩放数据,而不是数据类型。如果您需要使用某种方法进行规范化,我建议您改为手动进行。@suever非常有趣!你还知道为什么缩放可能会提高OP代码的性能吗?@Max我怀疑性能不是用timeit@suever使用timeit与tic toc的差异是否会大到可以得到因子3@卡拉西:您是否可以发布您观察到性能改进的代码?我想试试基准测试。