优化这段代码function data = read_data(filename) % 读取数据 %fid = fopen(filename, 'r'); data = multibandread(filename, [1989, 2126, 4], 'int16', 0, 'bsq', 'ieee-le'); data = double(data); B=data(:,:,1); G=data(:,:,2); R=data(:,:,3); C=data(:,:,4); data=cat(4,B,C,R,G); % 将数据转换为0-255的整型用于显示 data_unit8 = uint8(data); for k = 1:4 min_val = min(data(:, :, k), [], 'all'); max_val = max(data(:, :, k), [], 'all'); data_unit8(:, :, k) = uint8((data_unit8(:, :, k) - min_val) / (max_val - min_val) * 255); end % 返回处理后的数据 data = data_unit8; end function show_image(im, title_str, fig_num) figure(fig_num); imshow(im, [min(im(:)), max(im(:))]); title(title_str); end % 读取第一组数据 imgfilename1 = 'C:\Users\86182\Desktop\tif\QB2013.dat'; data1 = read_data(imgfilename1); % 读取第二组数据 imgfilename2 = 'C:\Users\86182\Desktop\tif\SV2018.dat'; data2 = read_data(imgfilename2); data_show=data; im = data_show(:,:,2:4); im = uint8(im); show_image(im, 'Quickbird影像432波段显示', 1); show_image(im, '高景影像432波段显示', 2);
时间: 2024-03-07 19:52:38 浏览: 20
这段代码可以进行如下优化:
1. 可以将读取数据的函数read_data中的multibandread函数改为imread函数,因为matlab中imread函数也支持读取多波段数据。这样可以减少代码复杂度,提高代码可读性。
2. 在读取数据之后,可以不用将数据转换为double类型,直接在计算min_val和max_val时将数据转换为double即可,这样可以减少内存占用。
3. 可以将计算min_val和max_val的循环放到数据转换为0-255的整型之前,这样可以避免重复计算,提高代码效率。
修改后的代码如下:
function data = read_data(filename)
% 读取数据
data = imread(filename);
data_unit8 = uint8(data);
for k = 1:4
data_k = double(data(:, :, k));
min_val = min(data_k, [], 'all');
max_val = max(data_k, [], 'all');
data_unit8(:, :, k) = uint8((data_k - min_val) / (max_val - min_val) * 255);
end
% 返回处理后的数据
data = data_unit8;
end
function show_image(im, title_str, fig_num)
figure(fig_num);
imshow(im, [min(im(:)), max(im(:))]);
title(title_str);
end
% 读取第一组数据
imgfilename1 = 'C:\Users\86182\Desktop\tif\QB2013.dat';
data1 = read_data(imgfilename1);
% 读取第二组数据
imgfilename2 = 'C:\Users\86182\Desktop\tif\SV2018.dat';
data2 = read_data(imgfilename2);
im1 = data1(:, :, 2:4);
im1 = uint8(im1);
show_image(im1, 'Quickbird影像432波段显示', 1);
im2 = data2(:, :, 2:4);
im2 = uint8(im2);
show_image(im2, '高景影像432波段显示', 2);