当前位置:网站首页>MATLAB在做图像处理时容易出现的一个误区:为提高运算速度使用预先声明的零矩阵存储图像数据

MATLAB在做图像处理时容易出现的一个误区:为提高运算速度使用预先声明的零矩阵存储图像数据

2022-06-21 20:40:00 吉大秦少游

MATLAB在做图像处理时容易出现的一个误区:为提高运算速度使用预先声明的零矩阵存储图像数据。

这个误区很隐蔽,因为这样预先声明的零矩阵可以显著提高运算速度,所以往往会认为是正确的做法。但是为了保证图像数据看起来正常,往往又需要使用im2double函数将输入的图像数据转化为double类型的矩阵,这样imshow出来的图像看起来正常,实际上图像数据由于格式转换导致精度已经有所变化,做数据处理时往往容易报错。

如下:注释部分的代码容易导致图像数据变化。

src_img = strcat(img_path, img_name);
pure_name = size(img_name,2);
pic_odd_name = strcat(img_name(1:pure_name-4), '_odd.bmp');
pic_even_name = strcat(img_name(1:pure_name-4), '_even.bmp');
pic = imread(src_img);
% pic = im2double(pic);
[pic_height, pic_width, rgb_depth] = size(pic);
% pic_odd = zeros([pic_height, pic_width/2, rgb_depth]);
% pic_even = zeros([pic_height, pic_width/2, rgb_depth]);

for i = 1:1:pic_height
    for j = 1:1:pic_width
%         for k = 1:1:rgb_depth
            if(mod(j,2) == 1)   % even pixel
                 pic_even(i,(j+1)/2,:) = pic(i,j,:);
            else
                 pic_odd(i,j/2,:) = pic(i,j,:);
            end
%         end
    end
end

因此,可以直接做处理即可,不用提前声明存储空间的大小,慢是慢一点。还一个做法是在图像数据读到工作区后观察图像数据的类型,再声明同样类型的零矩阵,这个做法理论上也可行,相比于不声明存储空间,在处理大量图像时速度可以快不少。

原网站

版权声明
本文为[吉大秦少游]所创,转载请带上原文链接,感谢
https://jidaqinshaoyou.blog.csdn.net/article/details/121641388