草庐IT

algorithm

全部标签

c++ - 如何计算二维对数色度?

我的目标是去除图像中的阴影。我使用C++和OpenCV。当然,我缺乏足够的数学背景,而且母语不是英语,所以一切都更难理解。在阅读了去除阴影的不同方法后,我找到了适合我的方法,但它依赖于他们称为“2D色度”和“2D对数色度空间”的东西"但即使是这个术语在不同的来源中似乎也不一致。主题论文很多,这里只列出几篇:http://www.cs.cmu.edu/~efros/courses/LBMV09/Papers/finlayson-eccv-04.pdfhttp://www2.cmp.uea.ac.uk/Research/compvis/Papers/DrewFinHor_ICCV03.pd

c++ - 为什么贪婪的方法在这种情况下不起作用?

我正在尝试解决以下问题SPOJproblem.输入是:1.总重量一定的钱币,2.使用币种的币值及对应权重。目标是找到给定金额的最小可能货币值(value)。我的方法是将货币的硬币按各自的值(value)/重量比升序排序,然后贪婪地在总和中尽可能多地拟合第一个硬币的重量(跟踪有多少次),然后将第二枚硬币的重量尽可能多地放入余数中,以此类推,对于所有硬币或直到余数为零(如果不是,则这种情况是不可能的)。法官说我的回答是错误的。你能给我一个关于算法错误的提示吗?我的代码在这里:#include#include#includeusingnamespacestd;typedefunsignedi

c++ - 用于计算乘数和除数值的优化算法

我正在尝试优化算法,但我想不出更好的方法。有一个输入(时钟频率值)将通过乘数和除数的组合。目标是在给定输入的情况下找到将产生所需输出值的乘数和除数值集。OutClk=(InClk*Mult1*Mult2*Mult3*Mult4/Div1)/Div2我目前的(幼稚的?)实现是:#definePRE_MIN10000000#definePRE_MAX20000000//Availablevaluesofthemultipliersanddivisors.uint8_tmult1_vals[]={1,2};uint8_tmult2_vals[]={1,2,4,8};uint8_tmult3_

c++ - 分割大量的3D点数据

我需要对一大组3D点进行分区(使用C++)。点以二进制float组的形式存储在硬盘上,文件通常大于10GB。我需要将该集合划分为大小小于1GB的较小子集。子集中的点应该仍然具有相同的邻域,因为我需要对数据执行某些算法(例如,对象检测)。我想我可以使用KD-Tree。但是,如果不能将所有点都加载到RAM中,我如何有效地构建KD树呢?也许我可以将文件映射为虚拟内存。然后我可以保存一个指向属于一个段的每个3D点的指针,并将其存储在KD树的一个节点中。那行得通吗?还有其他想法吗?感谢您的帮助。我希望你能理解这个问题:D 最佳答案 您基本上需

c++ - 如何知道 OpenCV 3.0 算法是否在透明 API 中具有 OpenCL 实现

我正在将我的OpenCV2.4.2迁移到OpenCV3.0,以便通过透明API使用OpenCL性能。但是,我注意到某些算法在CPU或GPU实现中花费相同的时间。我在官方文档中搜索,但没有找到答案。如何知道算法是否在透明API中具有自动OpenCL转换? 最佳答案 如果您有amdgpu,请使用codexl并创建一个新的codexl项目,附加您的项目并从codexl启动session,或者从您的IDE启动您的项目并将codexl附加到它的运行时。然后当程序完成时,codexl最后会自动生成必要的图形和分析信息(如果您选择适当的gpu分析

c++ - 使用子串比较的两个字符串集之间的交集

我知道这是bikeshedding但有没有办法在两个(排序的)字符串集A、B之间获取字符串集C,其中B是A的子字符串,其复杂性优于A.size*B.size*comp_substr,作为我想出的天真的解决方案?std::copy_if(devices.cbegin(),devices.cend(),std::back_inserter(ports),[&comport_keys](constauto&v){returnstd::any_of(comport_keys.begin(),comport_keys.end(),[&v](auto&k){returnv.find(k)!=std

c++ - 边缘相交算法?

给定多边形P,我按顺序排列了它的顶点。我有一个有4个顶点的矩形R我该怎么做:如果P的任何边(相邻顶点之间的线)与R的边相交,则返回TRUE,否则返回FALSE。谢谢**** 最佳答案 您需要的是一种快速确定线段是否与轴对齐矩形相交的方法。然后只需根据矩形检查边缘列表中的每个线段。您可以执行以下操作:1)将直线投影到X轴上,得到一个区间Lx。2)将矩形投影到X轴上,得到一个区间Rx。3)如果Lx和Rx不相交,直线和矩形不相交。[Y轴重复]:4)将直线投影到Y轴上,得到一个区间Ly。5)将矩形投影到Y轴上,得到一个区间Ry。6)如果Ly

c++ - 简化三次贝塞尔路径?

我正在尝试实现类似于Adob​​eIllustrator使用画笔工具所做的事情。它正确地分析和简化了路径,包括它的贝塞尔曲线图柄。我实现了Ramer–Douglas–Peucker_algorithm但是,它最终并不是我真正需要的。它适用于线段,但不考虑贝塞尔曲线图柄。有没有一种算法可以像这个算法一样做,但考虑到三次贝塞尔handle?这个的问题是曲线可能成一定角度,但算法只能看到一条直线。谢谢 最佳答案 您可能想要探索贝塞尔曲线的最小二乘法拟合。这是onethread和apdf这可能会有帮助..几年前我做过这种事情,并找到了一个G

C++ 返回泛型类型集合的正确方法

我是C++的新手,不幸的是我无法停止使用C#(我以前的语言)进行思考。我阅读了一些书籍、论坛和C++引用网站,但找不到我的问题的答案,所以我想我不妨在这里尝试一下,然后再放弃并写一些丑陋的东西。好了,我们可以开始了。我有一个带有抽象方法succesorsFunction的类,我希望它返回指向State的指针集合。我不想强制实现者使用特定的容器;我宁愿让他们选择(vector、列表等)。所以看起来像这样:classProblem{public:virtuallist::iteratorsuccesorsFunction(constState&state,list::iteratorres

c++ - 用于替换 map vector 的外部存储器数据结构

我正在对流网络进行迭代计算,在此期间我需要记录每个源对每条边上的流的贡献程度。任何一条边上的流量平均来自2%的源,所以我定义vector>flow,其中flow[e][s]=f意味着边上的流量e由于来源s是f.在每次迭代中,每个f在flow得到更新。程序的峰值内存使用量接近4GB。这适用于(32位)Linux和OSX,但它在Windows上崩溃(这似乎强加了2GBperprocesslimit)。如何使用vector>实现基于磁盘的数据结构?接口(interface)(或以其他方式解决此问题)? 最佳答案 我用过STXXL对于类似类