数字形状是二进制图像(blob)中的一组连接像素.
它可以通过行程编码紧凑地表示,即将像素分组为水平线段并存储起始端点坐标和长度.通常,RLC表示以光栅顺序存储运行,即逐行和从右到右.
对于平滑的形状,存储要求从O(N²)下降到O(N).
形状的轮廓是一个封闭的像素链,当其内部被填充时(通过填充算法)恢复形状.它也是O(N)表示.Wen的形状可用作位图,轮廓可以通过轮廓算法获得.
我正在寻找一种算法,该算法直接计算给定其RLC表示的形状轮廓,而不是在中间位图中绘制它.期望算法在运行次数中以时间线性运行.
你有遇到过解决方案吗?
algorithm run-length-encoding raster-graphics connected-components
我正在加载具有透明平面的PNG图像.转换为灰度时,图像中的透明区域显示为黑色,这似乎是默认背景.我需要它们是白色的.我能做什么 ?
[这不是关于如何保持透明度的常见问题.]
我需要在短消息(100到200位之间)上使用纠错技术.可用于添加冗余位的空间限制为20-50%.
我将不得不在C/C++中实现编码和解码.所以它需要是开源的或足够容易编程.(我以前在解码算法方面有过一些经验 - 它们很可怕!)
任何人都可以建议使用合适的错误代码(使用相关参数)?
我正在使用来自C++代码的NEON内在函数进行ARM优化.我理解并掌握了大多数打字问题,但我仍然坚持这一点:
该指令vzip_u8返回一个uint8x8x2_t值(实际上是一个两个数组uint8x8_t).我想将返回的值分配给plain uint16x8_t.我认为没有适当的vreinterpretq内在实现这一点,简单的演员阵容被拒绝.
因此,我根据用于查找一组点的凸包的礼品包装算法示例编写了以下代码:
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) 我有像这样的二值化图像:
我需要确定内部实心磁盘的中心和半径.正如您所看到的,它被一个接触它的纹理区域所包围,因此简单的连接组件检测不起作用.无论如何,周边的很大一部分都有一个空隙.
可能的治愈方法可能是通过侵蚀直到所有纹理消失或从磁盘断开,但这可能是耗时的并且迭代次数不确定.(此外,在一些不幸的情况下,磁盘上有小孔,随着侵蚀而增长.)
有没有更好的建议以强大而快速的方式解决这个问题?(我标记了OpenCV,但这不是强制性的,重要的是方法.)
我需要按照下面的模式加载并重新排列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)指令实现此目的的有效方法?
这需要重复执行,因此允许预先存储的掩码或常量.
我正在做一些需要使用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) 我正在使用为OpenGL 1.1编写的遗留代码(来自Windows SDK v7.0A),并使用Glut.
由于Glut在SDK中不可用,我应该下载什么版本?
更新:
我尝试过使用Glut 3.7,显然是最新版本(版权直到1998年?),只是为了看,它似乎工作正常.无论如何,我无法在任何地方找到兼容性信息......