第6章 图像处理_6.6图片金字塔与图片尺寸缩放

本文详细介绍了图像金字塔的概念,包括向上采样(pyrUp)和向下采样(pyrDown)的操作步骤,并解释了这些操作如何应用于图像处理中。此外,还探讨了尺寸调整函数resize的不同参数设置及其应用实例。
关于金字塔的上下的顺序问题

一般来说,
面积越大的图像,在数学上说成是低层图像,
面积越小的图像,在数学上说成是高层图像,

(向上)
第五层      1
第四层     111
第三层    11111
第二层  111111111
第一层 11111111111
(向下)

但对于金字塔函数来说,刚好相反,以上图中的上下方向来说
pyrUp是从上往下的运算——向上采样
pryDOWN是从下往上的运算——向下采样

向下采样:
(1)对图像G(i)进行高斯内核卷积
(2)去除所有偶数行和列

向上采样:
(1)在行核列上将图像扩大为2倍,并以0填充
(2)使用上述高斯内核进行卷积,获得“新增像素”的近似值

以下链接给出了插值算法的很好的说明
https://blog.youkuaiyun.com/qq_20823641/article/details/52221442?locationNum=2&fps=1

尺寸调整函数:resize
void resize(InputArray src, 
         OutputArray dst,
Size dsize, 
double fx = 0, 
double fy = 0, 
iont interpolation = INTER_LINEAR)
参数1 src:源图像
参数2 dst:输出图像,有着dsize的尺寸,或者src.size()计算出来的尺寸
参数3 dsize:输出图像大小。如果=0,则dsize = Size(round(fx*src.cols), round(fy*src.rows))
参数4 fx:沿水平轴的缩放系数。如果=0,fx = dsize.width/src.cols
参数5 fy:沿垂直轴的缩放洗漱。如果=0,fy = dsize.height/src.rows
参数6 interpolation:指定的插值方式
//! interpolation algorithm
enum
{
    INTER_NEAREST =CV_INTER_NN,  最邻近插值 //!< nearest neighbor interpolation
    INTER_LINEAR  =CV_INTER_LINEAR,  线性插值 //!< bilinear interpolation
    INTER_CUBIC   =CV_INTER_CUBIC,  三次样条插值 //!< bicubic interpolation
    INTER_AREA    =CV_INTER_AREA, 区域插值 //!< area-based (or super) interpolation
    INTER_LANCZOS4=CV_INTER_LANCZOS4, Lanczos插值 //!< Lanczos interpolation over 8x8 neighborhood
    INTER_MAX    =7,
    WARP_INVERSE_MAP=CV_WARP_INVERSE_MAP
};

例:
方式1:显示指定dsize = dstImage.size(),fx/fy会自动计算
Mat srcImage = imread("1.jpg");
Mat dstImage = Mat::zeros(512, 512, CV_8UC3);
resize(srcImage, dstImage, dstImage.size())

方式2:指定fx/fy,Size()表示使用Size的默认构造函数Size(0,0)
Mat srcImage = imread("1.jpg");
Mat dstImage;
resize(srcImage, dstImage, Size(), 0.5, 0.5);

向上采样函数:pyrUp(放大一张图片)
void pyrUp(InputArray src,
OutputArray dest,
const Size& destsize = Size(),
int borderType = BORDER_DEFAULT)
参数2 dest:输出图像,和src有一样的尺寸和类型
参数3 destsize:默认情况下为Size(src.col*2, src.rows*2)

例:
Mat srcImage = imread("1.jpg");
Mat destImage;
pyrUp(srcImage, destImage, Size(srcImage.cols*2, srcImage.rows*2))

向下采样函数:pyrDown(缩小一张图片)
void pyrDown(InputArray src,
OutputArray dest,
const Size& destsize = Size(),
int borderType = BORDER_DEFAULT)
参数2 dest:输出图像,和src有一样的尺寸和类型
参数3 destsize:默认情况下为Size((src.col+1)/2, (src.rows+1)/2)

例:
Mat srcImage = imread("1.jpg");
Mat destImage;

pyrDown(srcImage, destImage, Size((srcImage.col+1)/2, (srcImage.rows+1)/2))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值