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

Matlab三通道图像二值化存储时矩阵维度不匹配问题

问题原因

你读取的是三通道PNG图像,缩放为25×25像素后imresize输出的仍是尺寸为25×25×3的三维RGB矩阵,直接二值化后展开得到的列向量长度为25253=1875,和预分配的625行(25×25单通道尺寸)存储矩阵维度不匹配,因此赋值时报错。将存储矩阵改为1875行可运行,本质是刚好匹配了三通道矩阵展开后的长度,不符合你要的单幅图25×25二值存储的维度要求。

修复方法

核心修改是二值化前将三通道RGB图像转为单通道灰度图,保证缩放后图像为25×25的二维矩阵,展开后列向量长度为625,完全匹配预设的矩阵维度。另外同步修正两处原代码的逻辑漏洞:

  • 原代码存储矩阵列数写死为5,若文件夹内PNG文件总数不等于5会触发维度错误,应按实际检测到的文件数预分配矩阵
  • 原代码循环内imshow(m_circle)显示的是整个存储矩阵而非当前处理的单张图像,显示逻辑错误

修正后的完整可运行代码如下:

circle_folder = 'C:\Users\MyPC\Documents\CR\start\circle'; 
name_circle = dir(fullfile(circle_folder, '*.png')); 
total_circle = numel(name_circle); 
rez_circle = [25 25]; 
% 按实际文件数预分配625行存储矩阵,匹配预设的25*25单通道维度
m_circle = zeros(25*25, total_circle);
for n_circle = 1:total_circle 
    full_circle = fullfile(circle_folder, name_circle(n_circle).name); 
    images_circle = imread(full_circle); 
    % 三通道图像转单通道灰度,避免三维矩阵展开后长度不符
    if size(images_circle, 3) == 3
        images_circle = rgb2gray(images_circle);
    end
    images_circle = imresize(images_circle, rez_circle); 
    store_circle = imbinarize(images_circle);
    store_circle = store_circle(:);
    m_circle(:, n_circle) = store_circle;
    figure(n_circle); 
    % 修正显示逻辑,展示当前处理完成的单张25*25二值图
    imshow(reshape(m_circle(:, n_circle), rez_circle));
end

如果不需要灰度二值化,要单独提取R/G/B某一个通道做二值处理,将rgb2gray行替换为对应通道提取语句即可,例如提取R通道写为images_circle = images_circle(:,:,1);,最终展开的列向量长度仍为625,符合预设维度要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:54:18