You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MATLAB中将RGB矩阵转换为二进制数组 适配可见光通信需求

双向可见光通信图片转二进制MATLAB代码完善方案

现有代码核心问题

  • 变量名冲突:初始用i存储图片数据,后续循环又用i作为行索引,存在数据覆盖风险,也不符合MATLAB变量命名规范(i默认是虚数单位)
  • 仅处理R通道数据,未覆盖G、B两个通道
  • 转换得到的二进制字符串未持久存储,每次循环都会直接覆盖binStr变量,无有效输出
  • 图片尺寸硬编码为183*275,无法适配不同尺寸的输入JPG图片
  • dec2bin默认输出的二进制字符串长度不固定,比如像素值3会输出'11'而非8位的'00000011',不符合通信传输固定位宽的要求
  • 循环内R(i,j);为无效语句,无任何实际作用

完善后代码

% 读取输入图片,避免使用i作为变量名
img = imread('imageName.jpg');
% 动态读取图片尺寸,无需手动适配参数
[height, width, ~] = size(img);

% 提取RGB三个通道矩阵
R = img(:,:,1); % 红通道
G = img(:,:,2); % 绿通道
B = img(:,:,3); % 蓝通道

% 初始化二进制比特流数组:每个像素3通道,每通道8位,总长度为height*width*24
total_bit_num = height * width * 3 * 8;
binary_stream = zeros(1, total_bit_num);
bit_pointer = 1; % 比特流写入位置指针

% 逐像素遍历转换
for row_idx = 1:height
    for col_idx = 1:width
        % 转换红通道当前像素为8位二进制,写入比特流
        r_bin_str = dec2bin(R(row_idx, col_idx), 8);
        for bit_idx = 1:8
            binary_stream(bit_pointer) = str2double(r_bin_str(bit_idx));
            bit_pointer = bit_pointer + 1;
        end
        % 转换绿通道当前像素为8位二进制,写入比特流
        g_bin_str = dec2bin(G(row_idx, col_idx), 8);
        for bit_idx = 1:8
            binary_stream(bit_pointer) = str2double(g_bin_str(bit_idx));
            bit_pointer = bit_pointer + 1;
        end
        % 转换蓝通道当前像素为8位二进制,写入比特流
        b_bin_str = dec2bin(B(row_idx, col_idx), 8);
        for bit_idx = 1:8
            binary_stream(bit_pointer) = str2double(b_bin_str(bit_idx));
            bit_pointer = bit_pointer + 1;
        end
    end
end

% 后续可直接将binary_stream传入LED驱动接口完成发送

代码说明

  • 输出的binary_stream是1维0/1数字数组,可直接用于控制LED亮灭完成可见光通信发送
  • 如果需要按通道拆分输出,可自行修改存储逻辑,分别保存R、G、B三个通道对应的二进制数组
  • 所有像素统一转换为8位固定长度二进制,保证收发两端位宽匹配,避免解析错误
  • 自动适配任意尺寸的JPG输入图片,无需手动修改循环边界参数

内容的提问来源于stack exchange,提问作者Dulitha Sandaruwan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:27:02