社区
图形处理/算法
帖子详情
求matlab中的conv2卷积函数用c++如何实现
fengbingchun
领域专家: C/C++技术领域
2010-09-14 02:18:21
matlab中C = conv2(H1, H2, A, 'same');
这条语句用c++如何实现呢?
求大侠们帮帮忙!!!
...全文
965
4
打赏
收藏
求matlab中的conv2卷积函数用c++如何实现
matlab中C = conv2(H1, H2, A, 'same'); 这条语句用c++如何实现呢? 求大侠们帮帮忙!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
freeboy1015
2012-09-22
打赏
举报
回复
调用opencv函数:
enum ConvolutionType {
/* Return the full convolution, including border */
CONVOLUTION_FULL,
/* Return only the part that corresponds to the original image */
CONVOLUTION_SAME,
/* Return only the submatrix containing elements that were not influenced by the border
*/
CONVOLUTION_VALID
};
void conv2(const Mat &img, const Mat& kernel, ConvolutionType type, Mat& dest) {
Mat source = img;
if(CONVOLUTION_FULL == type) {
source = Mat();
const int additionalRows = kernel.rows-1, additionalCols = kernel.cols-1;
copyMakeBorder(img, source, (additionalRows+1)/2, additionalRows/2,
(additionalCols+1)/2, additionalCols/2, BORDER_CONSTANT, Scalar(0));
}
Point anchor(kernel.cols - kernel.cols/2 - 1, kernel.rows - kernel.rows/2 - 1);
int borderMode = BORDER_CONSTANT;
filter2D(source, dest, img.depth(), flip(kernel), anchor, 0, borderMode);
if(CONVOLUTION_VALID == type) {
dest = dest.colRange((kernel.cols-1)/2, dest.cols - kernel.cols/2)
.rowRange((kernel.rows-1)/2, dest.rows - kernel.rows/2);
}
}
dengzikun
2010-09-14
打赏
举报
回复
cvFilter2D好象不是做卷积的.
效率问题需要优化.可以参考INTEL IPP库,看是否有类似的实现.
也可考虑用GPU优化,参考nvida的CUDA.
fengbingchun
2010-09-14
打赏
举报
回复
我在网上看到过这个代码,如果图像太大,效率会很低,不知用opencv的cvFilter2D函数是否与用conv2得到的结果一致呢?
dengzikun
2010-09-14
打赏
举报
回复
http://download.csdn.net/source/731440
C++
实现
卷积
操作的代码示例
资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 使用Eigen库编写的
C++
卷积
函数
,其设计初衷是为了在计算系统响应、多项式乘法、滤波器设计以及图像处理等多个领域
中
具有更广泛的适用性。除了
实现
与
MATLAB
中
提供的
卷积
功能相似的部分外,该
函数
还增加了对边界处理条件的选择,以适应不同的应用场景需
求
。 在
MATLAB
中
,conv和
conv2
函数
分别用于计算一维和二维
卷积
,它们处理的是离散数据。而在
C++
实现
中
,通过Eigen库的支持,可以将
卷积
操作扩展到更一般的情况。Eigen库是一个高效的
C++
矩阵计算库,它提供了丰富的矩阵操作功能,使得在
C++
中
进行复杂的数学运算变得更加方便和高效。 在
C++
卷积
函数
的
实现
中
,首先需要考虑的是
卷积
操作的类型。与
MATLAB
类似,
C++
实现
也提供了三种
卷积
操作类型:full、same和valid。这三种类型分别对应于不同的
卷积
结果尺寸和应用场景。full类型表示完整的
卷积
结果,其尺寸为输入矩阵尺寸之和减一;same类型表示输出矩阵与输入矩阵具有相同的尺寸;而valid类型则表示只计算有效的
卷积
结果,即不考虑边界效应的结果。 除了
卷积
操作类型外,边界处理条件也是
卷积
函数
中
一个重要的考虑因素。在
MATLAB
中
,
卷积
计算通常假设边界以外的点为零。然而,在某些应用场景
中
,这种假设可能并不合理。因此,
C++
实现
提供了三种边界处理条件:边界以外的点为零(默认)、边界以外的点与边界值相等、边界以外的点与另一边界上的点组成周期信号。这三种条件分别适用于不同的应用场景,例如图像处理
中
可能需要考虑边界点的连续性,而在信号处理
中
可能需要考虑信号的周期性。 在具体的
实现
过程
中
,
C++
卷积
函数
首先根据输入矩阵的尺寸和
卷积
操作类型计算出输出矩阵的尺寸。然后,根据边界处理条件,对输入矩阵进行必要的扩展或填充。接下来,通过双重循环遍
线性
卷积
matlab
的
实现
线性
卷积
在
MATLAB
中
的
实现
,包括程序,在DSP
中
的
实现
。数字信号处理的应用
matlab
开发-GPU
CONV2
matlab
开发-GPU
CONV2
。例如,使用CUDA内核的GPU上的
matlab
r2100b cuda
conv2
chengxu.zip_MFC_chengxu_convolution_
卷积
实现
线性
卷积
和
卷积
的编程,用于
MATLAB
软件的
实现
深度学习CNN 故障诊断
Matlab
内容包含
Matlab
编写的CNN程序代码,每一步都有详细的注解,易于阅读和调试代码。有相应的故障数据集,直接下载下来运行,可以替换为自己的数据集,如果想要得到更好地结果,可以调试网络结构相应的参数。
图形处理/算法
19,469
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章