gpt4 book ai didi

matlab - 用于转换许多元素的 dec2bin 函数的更快版本?

转载 作者:太空宇宙 更新时间:2023-11-03 19:22:35 28 4
gpt4 key购买 nike

我正在读取位图文件并将范围从 0 到 255 的 每个 RGB 值转换为二进制。

因此 240 x 320 位图将有 230400 个 RGB 值需要转换。原来的 dec2bin 函数太慢了,所以我自己写了一个,因为我知道我的值总是在 0 到 255 之间。

但是遍历 230400 个值仍然需要大约。在我的机器上需要 6 秒,单色位图大约需要 2.3 秒。

有什么方法可以将速度提高到 1 秒以下,甚至更好的 0.5 秒,因为每一毫秒对我的应用程序都很重要?

这是我的代码:

function s = dec2bin_2(input)

if input == 255
s = [1;1;1;1;1;1;1;1];
return;
end

s = [0;0;0;0;0;0;0;0];

if input == 0
return;
end

if input >= 128
input = input - 128;
s(1) = 1;
if input == 0
return;
end
end

if input >= 64
input = input - 64;
s(2) = 1;
if input == 0
return;
end
end

if input >= 32
input = input - 32;
s(3) = 1;
if input == 0
return;
end
end

if input >= 16
input = input - 16;
s(4) = 1;
if input == 0
return;
end
end

if input >= 8
input = input - 8;
s(5) = 1;
if input == 0
return;
end
end

if input >= 4
input = input - 4;
s(6) = 1;
if input == 0
return;
end
end

if input >= 2
input = input - 2;
s(7) = 1;
if input == 0
return;
else
s(8) = 1;
end
end
end

我在想,如果我不能在 MATLAB 中完成,那么也许我会在 C++ 中完成转换。这可取吗?

谢谢。

最佳答案

一种更快的方法是使用查找表。由于您知道所有值都是 0 到 255 之间的强度,因此您构造每个值的二进制等价物以加快该过程。

% build table (computed once) [using gnovice option#1]
lookupTable = cell2mat(arrayfun(@(i)bitget([0:255]',9-i),1:8,'UniformOutput',0));

% random' image
I = randi(256, [240 320])-1;

% decimal to binary conversion
binI = lookupTable(I(:)+1,:);

在我的机器上,平均花费 0.0036329 秒(仅转换)。请注意查找表几乎没有空间开销:

>> whos lookupTable
Name Size Bytes Class Attributes
lookupTable 256x8 2048 uint8

关于matlab - 用于转换许多元素的 dec2bin 函数的更快版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1544456/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com