下采样与上采样

一、下采样

概念:下采样(subsampled),又称为降采样(downsampled)。可以通俗地理解为缩小图像,减少矩阵的采样点数。

方法:(1)最常用隔位取值,每行每列每隔k个点取一个点(2)合并区域:每(row/k)*(col/k)窗口内所有像素的均值作为一个像素;(3)超分辨率项目中一般使用MATLAB函数imresize,先归一化到[0,1](直接除以图像范围最大值),再imresize(先下采样再上采样),再乘以图像范围最大值,然后求PSNR。(4)信号处理中,为了避免频域混叠,先滤波再采样。(理想滤波器的冲激响应就是sinc,所以跟sinc卷积相当于理想滤波。)

代码:

原代码来源

%   Name: dsample.m 
%   功能:降采样,指定偏移下采样序列的样本数
%   输入:采样图片 I, 降采样系数N,偏移样本数Phase
%   输出:采样后的图片Idown 
%   author:zhangshuyuan date:2021/7/12
%======================================================== 
function Idown = dsample(I,N,varargin) 

narginchk(2,3) % 限制输入参数的个数,在2~3之间不会报错

if isempty(varargin) % 使用varargin可以输入不定数目参数 % 或者使用switch...case...语句
    Phase = 0;
else
    Phase = varargin{1};
end

[row,col] = size(I);  % row×col
drow = round(row/N); 
dcol = round(col/N); 
Idown = zeros(drow,dcol); 
p =1; 
q =1; 

Phase_r = min(Phase+1,row);
Phase_c = min(Phase+1,col); % 从偏移下采样序列的位置开始成为新矩阵的元素
for i = Phase_r:N:row 
    for j = Phase_c:N:col 
        Idown(p,q) = I(i,j); 
        if q

二、上采样

概念:上采样(upsampling),又称为插值(interpolating)。可以通俗地理解为放大图像,增加矩阵的采样点数。

方法:(1)最常用内插值,每行每列每相邻两点间增加新的k-1个采样点;包括最邻近元法、双线性插值法、三次内插法等;(MATLAB函数imresize)(2)频域补0,根据傅里叶变换性质等同于在空域插值;(3)反卷积,用于网络中,具体见详情

代码来源

%   Name: usample.m 
%   功能:升采样 
%   输入:采样图片 I, 升采样系数N 
%   输出:采样后的图片Idown 
%   author:gengjiwen date:2015/5/10 
%======================================================== 
function Iup = usample(I,N) 
[row,col] = size(I); 
upcol = col*N; 
upcolnum = upcol - col; 
uprow = row*N; 
uprownum = uprow -row; 

If = fft(fft(I).').'; %fft2变换 
Ifrow = [If(:,1:col/2) zeros(row,upcolnum) If(:,col/2 +1:col)];   %水平方向中间插零 
%补零之后,Ifrow为 row*upcol
Ifcol = [Ifrow(1:row/2,:);zeros(uprownum,upcol);Ifrow(row/2 +1:row,:)];   %垂直方向补零 
Iup = ifft2(Ifcol); 
end 

你可能感兴趣的:(图像处理,MATLAB,机器学习,matlab,计算机视觉)