首先图像下采样
两种方式:
方法一,for循环隔行隔列循环遍历每一个像素点
%读入图像进行下采样
%两种方法用时只需将对应方法注释掉其中一个即可
clear all;
close all;
clc;
img = imread('F:\MATLAB2017b\AMOutputResults\lena.jpg');
% n为下采样倍数
n = 2;
img = rgb2gray(img);
[h w] = size(img);
L =1;
R = 1;
%对图像进行下采样
tic;
img_down = zeros(256,256);
% %方法一循环遍历每一个像素点,j为行,i表示列
% for j = 1:n:h
% for i = 1:n:w
% img_down(L, R) = img(j,i);
% R = R+1;
% end
% L = L+1;
% R = 1;
% end
toc;
%%%%%%%%%%%%%%%%%%%%%%%%%
%tic;
%%方法二矩阵隔行隔列赋值
%img_down = img(1:n:512,1:n:512);
%toc;
imshowpair(img,(uint8(img_down)),'montage');
title('512*512 256*256');
方法二,矩阵隔行隔列复制
其实道理也是一样的不过代码更短一些,在程序中间加了tic,toc来计时间,
发现方法一:时间已过 0.002278 秒。方法二大概:时间已过 0.000293 秒。。。
第二种方法比第一种for循环快了将近10倍。可见在大型图片下采样时还是尽量避免for嵌套循环,转而用矩阵向量的计算方式,这样会省不少时间 。