C++-采样函数GridSampling(采样提速必备)
作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
场景需求
采样是在做大量数据计算时常用的优化方法,合理的采样方式可以使计算速度提高数十倍数百倍。比如原本1000*1000的图像数据要进行百次迭代计算,运用采样法提取100*100的图像数据进行分析,最少提速100倍,大大减少了不必要的计算,从而提高程序运行速度。该方法我通常用于面形拟合,来快速计算拟合系数,也常用于迭代计算;但是,一定要注意,合理的采样间隔很重要,不要一味追求速度,采样提速的同时也意味着有效数据的减少,对结果是有一定影响的,合理的设计才可以忽略此影响。
话不多说,下方为具体实现函数和测试代码。
功能函数代码
/*** @brief GridSampling 设置采样的位置点* @param size 重采样的范围尺寸* @param rowinterval 行间隔* @param colinterval 列间隔* @return 重采样的mask*/
cv::Mat GridSampling(const cv::Size& size, int rowinterval, int colinterval)
{cv::Mat dst(size, CV_8UC1, cv::Scalar(0));//设置采样的位置点int Row = dst.rows;int Col = dst.cols;for (int row = 0; row < Row; row += rowinterval) {for (int col = 0; col < Col; col += colinterval) {dst.at<uchar>(row, col) = 255;}}return dst;
}
C++测试代码
#include <iostream>
#include <opencv.hpp>
using namespace std;
using namespace cv;
cv::Mat GridSampling(const cv::Size& size, int rowinterval, int colinterval);
int main()
{// 随机生成一个矩阵cv::Mat src(100,100,CV_32FC1);for (int i = 0; i < 100; ++i){for (int j = 0; j < 100; ++j){src.at<float>(i, j) = rand() % 255;}}// 创建掩膜maskcv::Mat mask = cv::Mat::zeros(src.size(), CV_8UC1);cv::circle(mask, cv::Point(50, 50), 40, 255, -1);// 创建采样区int sampInterval = 2; // 采样间隔为2cv::Mat samp = GridSampling(src.size(), sampInterval, sampInterval);cv::Mat samp_mask = samp.clone();samp_mask.setTo(0, ~mask);// 将采样区的数据放置在sampling中存储,以便后续计算std::vector<cv::Point> samplingidx_roi;cv::findNonZero(samp_mask, samplingidx_roi);int len = (int)samplingidx_roi.size();cv::Mat sampling(len, 1, CV_32FC1, 0.0f);auto tmp = samplingidx_roi.begin();for (int i = 0; i < len; ++i, ++tmp) {int x = tmp->x;int y = tmp->y;sampling.ptr<float>(i)[0] = src.ptr<float>(y)[x];}system("pause");return 0;
}/*** @brief GridSampling 设置采样的位置点* @param size 重采样的范围尺寸* @param rowinterval 行间隔* @param colinterval 列间隔* @return 重采样的mask*/
cv::Mat GridSampling(const cv::Size& size, int rowinterval, int colinterval)
{cv::Mat dst(size, CV_8UC1, cv::Scalar(0));//设置采样的位置点int Row = dst.rows;int Col = dst.cols;for (int row = 0; row < Row; row += rowinterval) {for (int col = 0; col < Col; col += colinterval) {dst.at<uchar>(row, col) = 255;}}return dst;
}
测试效果
在测试案例中,随机生成了一个100*100的数据矩阵,运用采样函数创建了采样区,再进行掩膜处理,将所需要计算的采样点对应的数据放置在sampling矩阵中,1257是采样点的个数,之后就可以进行一些矩阵计算来实现各种各样的功能。
如果函数有什么可以改进完善的地方,非常欢迎大家指出,一同进步何乐而不为呢~
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!
C++-采样函数GridSampling(采样提速必备)相关推荐
- matlab中采样函数,matlab采样相关函数用法详解
matlab采样函数(降采样,过采样,减采样函数)用法详解 dyaddown 功能:对时间序列进行二元采样,每隔一个元素提取一个元素,得到一个降采样时间序列. 格式: 1.y = dyaddown(x ...
- R语言dplyr包sample_n函数、sample_frac函数数据采样实战
R语言dplyr包sample_n函数.sample_frac函数数据采样实战 目录 R语言dplyr包sample_n函数.sample_frac函数数据采样实战 #导入dplyr包
- 【Android 高性能音频】AAudio 音频流 数据回调细节 ( 数据回调函数优先级 | 数据回调函数 | 采样率 | 采样数 | 缓冲区调整 | 线程不安全 )
文章目录 I . 数据回调函数优先级 II . 数据回调函数 相关内容 III . 采样率 处理细节 IV . 数据回调函数 每次 采样个数 numFrames V . 数据回调函数 缓冲区 ( AA ...
- VTK:采样函数用法实战
VTK:采样函数用法实战 程序输出 程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkContourFilter.h&g ...
- 【Pytorch】interpolate==>上下采样函数
def interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None):r"&quo ...
- 【PyTorch 】interpolate()==>上下采样函数
def interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None, recompute_s ...
- numpy学习笔记之随机采样函数
numpy的随机采样函数 np.random.choice(a, size=None,replace=None, p=None) 功能:Generates a random sample from a ...
- python实现采样函数_PR Sampling Ⅰ: 蒙特卡洛采样、重要性采样及python实现
刘浚嘉:PR:机器人学的概率方法学习路径zhuanlan.zhihu.com PR 采样分章 第一节:蒙特卡洛采样.重要性采样 引言 还记得我们之前学过的贝叶斯推断吗?刘浚嘉:PR Ⅱ:贝叶斯估计/ ...
- 深入理解采样定理 + Matlab 仿真 Sa 函数的采样与恢复
建议配合国宝老师的视频食用. 信号与线性系统分析 吴大正 郭宝龙 文章目录 (1) 采样的说明 1. 为什么要取样 2. 什么是取样 (2) 采样定理 1. 为什么要有奈奎斯特频率 2. 什么是采样定 ...
最新文章
- ASP.NET2.0轻松搞定统计图表【月儿原创】
- OKR管理和绩效考核有什么不一样呢?
- tomcat的log日志乱码解决方案
- 正确使用 SharePoint 对象避免内存泄漏(续)
- 5-2 决策树算法预测销量高低代码
- halcon/c++接口基础 之 HALCON图像变量类
- Oracle数据库链路
- 地址省市县三级联动------数据库设计
- Fritzing软件绘制Arduino面包板接线图传感器模块库文件170
- android连iphone热点超时,苹果手机开热点安卓手机连不了为什么
- excel组合汇总_Excel汇总20151102
- 三种最常用的期货交易系统,99%的人都不知道
- MathType公式编辑器中怎么输入千分号
- 初识Web与HTML
- AToken全观:情人节妹子收了520个BTC,成吨狗粮灌到饱
- Python实战笔记-常用知识点
- 制作WINRE恢复光盘
- html5图片按钮播放,html 播放 按钮
- 简单的员工信息管理系统
- 泸州职业技术学院计算机单招试题,泸州职业技术学院普通类9+3单招考试技能测试考纲...
热门文章
- 《中国人工智能学会通讯》——11.34 基于近似动态规划的优化控制研究及 在电力系统中的应用...
- Golang Import使用入门
- 【IOS】ios8推送消息注册
- 【2012百度之星资格赛】J:百度的新大厦
- 8-18 高可用读写分离
- 技嘉 b360m d3h-cf efi_技嘉Geforce RTX 3080 GAMING OC 10G评测:性能入魔,方为魔鹰_显卡...
- Java 和C# 最大的不同是对底层的控制能力不同
- oracle number +1,number number(1)
- endnote大客户版_Endnote软件的使用,有图有干货!
- QObject::startTimer: Timers cannot be started from another thread