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) % eve