小编Yve*_*ust的帖子

行程编码数字形状的轮廓

数字形状是二进制图像(blob)中的一组连接像素.

它可以通过行程编码紧凑地表示,即将像素分组为水平线段并存储起始端点坐标和长度.通常,RLC表示以光栅顺序存储运行,即逐行和从右到右.

对于平滑的形状,存储要求从O(N²)下降到O(N).

形状的轮廓是一个封闭的像素链,当其内部被填充时(通过填充算法)恢复形状.它也是O(N)表示.Wen的形状可用作位图,轮廓可以通过轮廓算法获得.

我正在寻找一种算法,该算法直接计算给定其RLC表示的形状轮廓,而不是在中间位图中绘制它.期望算法在运行次数中以时间线性运行.

在此输入图像描述

你有遇到过解决方案吗?

algorithm run-length-encoding raster-graphics connected-components

5
推荐指数
1
解决办法
391
查看次数

设置具有透明度的PNG的背景颜色

我正在加载具有透明平面的PNG图像.转换为灰度时,图像中的透明区域显示为黑色,这似乎是默认背景.我需要它们是白色的.我能做什么 ?

[这不是关于如何保持透明度的常见问题.]

python opencv alpha-transparency

5
推荐指数
1
解决办法
1891
查看次数

错误纠正代码

我需要在短消息(100到200位之间)上使用纠错技术.可用于添加冗余位的空间限制为20-50%.

我将不得不在C/C++中实现编码和解码.所以它需要是开源的或足够容易编程.(我以前在解码算法方面有过一些经验 - 它们很可怕!)

任何人都可以建议使用合适的错误代码(使用相关参数)?

c c++ error-correction

4
推荐指数
1
解决办法
1万
查看次数

数据类型与NEON内在函数的兼容性

我正在使用来自C++代码的NEON内在函数进行ARM优化.我理解并掌握了大多数打字问题,但我仍然坚持这一点:

该指令vzip_u8返回一个uint8x8x2_t值(实际上是一个两个数组uint8x8_t).我想将返回的值分配给plain uint16x8_t.我认为没有适当的vreinterpretq内在实现这一点,简单的演员阵容被拒绝.

gcc arm intrinsics neon

4
推荐指数
1
解决办法
2382
查看次数

具有共线点的礼品包装算法

因此,我根据用于查找一组点的凸包的礼品包装算法示例编写了以下代码:

std::vector<sf::Vector2f> convexHull(const std::vector<sf::Vector2f>& _shape)
{
    std::vector<sf::Vector2f> returnValue;    
    returnValue.push_back(leftmostPoint(_shape));
    for (std::vector<sf::Vector2f>::const_iterator it = _shape.begin(), end = _shape.end(); it != end; ++it)
    {
        if (elementIncludedInVector(*it, returnValue)) continue;
        bool allPointWereToTheLeft = true;
        for (std::vector<sf::Vector2f>::const_iterator it1 = _shape.begin(); it1 != end; ++it1)
        {
            if (*it1 == *it || elementIncludedInVector(*it1, returnValue)) continue;
            if (pointPositionRelativeToLine(returnValue.back(), *it, *it1) > 0.0f)
            {
                allPointWereToTheLeft = false;
                break;
            }
        }
        if (allPointWereToTheLeft)
        {
            returnValue.push_back(*it);
            it = _shape.begin();
        }
    }
    return returnValue;
}
Run Code Online (Sandbox Code Playgroud)

这是我用于确定第三个点位于线的哪一侧的函数:

float pointPositionRelativeToLine(const sf::Vector2f& A, const sf::Vector2f& …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm geometry convex

4
推荐指数
1
解决办法
1859
查看次数

二进制图像中磁盘的半径

我有像这样的二值化图像:

在此输入图像描述

我需要确定内部实心磁盘的中心和半径.正如您所看到的,它被一个接触它的纹理区域所包围,因此简单的连接组件检测不起作用.无论如何,周边的很大一部分都有一个空隙.

可能的治愈方法可能是通过侵蚀直到所有纹理消失或从磁盘断开,但这可能是耗时的并且迭代次数不确定.(此外,在一些不幸的情况下,磁盘上有小孔,随着侵蚀而增长.)

有没有更好的建议以强大而快速的方式解决这个问题?(我标记了OpenCV,但这不是强制性的,重要的是方法.)

opencv image-processing

4
推荐指数
1
解决办法
185
查看次数

使用向量指令进行复杂的数据重组

我需要按照下面的模式加载并重新排列12个字节到16(或24到32):

ABC DEF GHI JKL
Run Code Online (Sandbox Code Playgroud)

ABBC DEEF GHHI JKKL
Run Code Online (Sandbox Code Playgroud)

您能否建议使用SSE(2)和/或AVX(2)指令实现此目的的有效方法?

这需要重复执行,因此允许预先存储的掩码或常量.

x86 simd vectorization sse2 avx2

2
推荐指数
1
解决办法
304
查看次数

Java中更快的GCD(n,m)?

我正在做一些需要使用GCD算法的事情,我希望它尽可能快。我尝试了普通方法,二进制方法和备忘录方法,我认为它们会比以前更好。我从这里复制了二进制方法,进行了一些细微调整。

我一直在使用一个名为TestGCD的类进行测试,这就是整个过程:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TestGCD
{
  private static class Pair<A>
  {
    private final A a_one;
    private final A a_two;

    public Pair(A a_one, A a_two)
    {
      this.a_one = a_one;
      this.a_two = a_two;
    }

    @Override
    public boolean equals(Object object)
    {
      if (this == object)
        return true;
      if (object == null)
        return false;
      if (!(object instanceof Pair))
        return false;

      final Pair other = (Pair) object;

      if (a_one == null)
        if (other.a_one != null) …
Run Code Online (Sandbox Code Playgroud)

java algorithm greatest-common-divisor

1
推荐指数
1
解决办法
1774
查看次数

哪个版本的Glut for OpenGL 1.1?

我正在使用为OpenGL 1.1编写的遗留代码(来自Windows SDK v7.0A),并使用Glut.

由于Glut在SDK中不可用,我应该下载什么版本?

更新:

我尝试过使用Glut 3.7,显然是最新版本(版权直到1998年?),只是为了看,它似乎工作正常.无论如何,我无法在任何地方找到兼容性信息......

c++ opengl visual-studio-2010

1
推荐指数
1
解决办法
135
查看次数