将3D十进制RGB矩阵转换为8位3D二进制矩阵技术问询
把RGB十进制3D矩阵转成8位二进制3D矩阵的实现方案
嘿,我来帮你搞定这个转换需求!本质上就是把原RGB矩阵每个通道里的十进制数值,全部转换成带前导零的8位二进制字符串,同时保持原有的3D矩阵结构。下面我分别用MATLAB和Python两种常用工具来给你具体实现方案:
MATLAB实现方案
首先先定义你给出的原始矩阵A,然后通过dec2bin函数完成转换,两种写法供你选择:
写法1:循环遍历(直观易懂)
% 定义原始RGB矩阵A A(:,:,1) = [123 7 8; 1 98 4; 64 39 6]; A(:,:,2) = [1 0 4; 3 6 5; 9 8 80]; A(:,:,3) = [7 96 3; 4 5 67; 129 9 98]; % 初始化同维度的字符串矩阵B B = strings(size(A)); % 逐个元素转换为8位二进制字符串 for channel = 1:3 for row = 1:size(A,1) for col = 1:size(A,2) B(row, col, channel) = dec2bin(A(row, col, channel), 8); end end end
写法2:向量化操作(高效简洁)
如果你的矩阵规模很大,推荐用这种无循环的写法,运行速度更快:
% 定义原始RGB矩阵A A(:,:,1) = [123 7 8; 1 98 4; 64 39 6]; A(:,:,2) = [1 0 4; 3 6 5; 9 8 80]; A(:,:,3) = [7 96 3; 4 5 67; 129 9 98]; % 直接转换并重塑维度 B = dec2bin(A, 8); B = reshape(B, size(A,1), size(A,2), size(A,3));
运行后你可以验证结果,比如输入B(:,:,1),就能得到和你示例结构一致的8位二进制字符串矩阵(注:你示例中第一个元素写的01111010是122的二进制,123的正确8位二进制是01111011,应该是示例笔误~)
Python实现方案
如果你用Python+Numpy来处理,代码同样简洁:
import numpy as np # 定义原始RGB矩阵A A = np.zeros((3, 3, 3), dtype=int) A[:, :, 0] = [[123, 7, 8], [1, 98, 4], [64, 39, 6]] A[:, :, 1] = [[1, 0, 4], [3, 6, 5], [9, 8, 80]] A[:, :, 2] = [[7, 96, 3], [4, 5, 67], [129, 9, 98]] # 用vectorize把格式化函数应用到每个元素 B = np.vectorize(lambda x: format(x, '08b'))(A)
这里format(x, '08b')的作用就是把十进制数x转换成固定8位、不足补前导零的二进制字符串,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者Nigussu Sima
相关产品推荐
相关产品推荐

