Fenrier Lab

算法题:矩形分割

问题 给定一个矩形框作为背景,在其中放置一个方块,可以将大矩形分割成若干个大小不等的矩形区域,放置的方块越多,分割方案也越多,如下图所示。 现在给出大矩形的坐标,以及若干方块的坐标(方块完全位于大矩形内部,且它们之间不相交,并且放置顺序固定),要求编程输出分割后最大的矩形区域坐标。 思路 首先分析放置一个矩形的分割情况,一个方块可以把背景分割成 4 个矩形区域,其中每个点可以横向或者纵向绘制线段,因此总共有 (2^4 = 16) 种分割方案。 在放置第二个矩形物体的时候,会出现两种情况,一种情况是落入前一步的小矩形内(下图左边),第二情况是破坏原来的分割方案(下图右边)。 对于第一种情况,置入的物体可以继续分割其所在的矩形,而第二种情况则直接淘汰掉,表现在树结构上...
点我阅读更多...

面向组合子编程在复杂业务逻辑中的工程化实现——多源图片素材请求模块

现有项目需要处理大量的图片,这些图片有的保存在文件系统,有的放在对象存储,甚至还有一部分需要实时地从网上下载。在不同的条件下可能需要处理这些图片中的一部分或全部,比如需求 A A: 按文件系统 - 对象存储 - 网络的顺序依次处理,在这期间如果满足中止条件,则放弃后续图片。 对于这样的需求,我们可以给出下面的伪代码 // A is_stopped=false for image in file_system: is_stopped = check() if(is_stopped) { break } handle(image) for image in ossfs: is_stopped=check() if(is_stopped){ ...
点我阅读更多...

人脸姿态估计 (1)

人脸姿态估计指的是根据一幅2维的人脸图像,计算出这个人在实际3维空间中的面部朝向。问题的输入条件就是一张人脸图片,输出自然就是可以表示方位的三个旋转角度 (pitch, yaw, roll),其中 pitch 表示俯仰角(关于x轴的旋转角度),yaw 表示偏航角(关于y轴的旋转角度),roll 表示翻滚角(关于z轴的旋转角度),分别如下面 3 图所示:(说句题外话,如果我们把下面图中的物体看作是一架向我们飞来的飞机,就可以理解为何这三个角要如此命名了) 算法的思路很简单,可以考虑这样一种场景,假设我们有一张标准的3d人脸模型,如果投影和输入图片的人脸大致重合,那么此时 3d 模型的方位就可以看作是图片中人脸在实际空间中的方位了。如果投影和图像的差异很大,那我们再对 3d 模型...
点我阅读更多...

为何要对数据归一化或标准化

对数据进行归一化或者标准化是一种常用的数据预处理步骤,一般给出的解释是消除数据量纲差异对模型训练的影响,为了搞清楚会产生何种影响,我们尝试使用自造的数据集来一次模拟分析。 现在给一个3维空间中的平面 \[z(x, y) = 100 x + 20 y\] 在此平面附近随机生成样本集合 \(S = {(x_i, y_i, z_i)\mid i=1…n, 0\le x \le 10, 0 \le y \le 50}\),然后利用这个样本集来做回归学习,将模型定义为 \[\hat{z}(x, y) = \theta_1 x + \theta_2 y\] 其中 \(\theta_1 , \theta_2\) 便是要训练的系数。 下面我们生成训练数据,方法是在上述平面上取点,并添加随机...
点我阅读更多...

OpenCV 图像处理——描边

实现效果 关键函数 /** * Imgproc.java * @param src 原图 @param dst 目标图 @param kernel 膨胀参数 */ public static void dilate(Mat src, Mat dst, Mat kernel) 实现思路 分离出 alpha 通道; Core.split(img, channels); Mat alpha = channels.get(3); 应用 dilate 函数膨胀; Mat kernel = Mat.ones(thick, thick, CvType.CV_32S) dilate(alpha, alpha, kernel) 为原始图...
点我阅读更多...