Mar*_*gus 5 c# image-processing computer-vision
图像序列的位置和大小是固定的并且事先已知(它没有缩放).它将非常短,最多20帧并且处于闭环状态.我想验证(由按钮点击驱动的事件),我以前见过它.
可以说我有一些图像序列,如:
http://img514.imageshack.us/img514/5440/60372aeba8595eda.gif
如果看到,我想看到与之关联的ID,如果没有 - 它将被分析并添加为已经看到的图像序列的新实例.我有很长一段时间,但我承认,这可能是一个难题.我似乎很难将这些全部放在一起,有人可以协助(在C#中)吗?
我并没有尝试重新创建版权检测系统,就像Youtube实施的内容ID系统一样(Margaret Gould Stewart在TED(链接)).图像序列可以像(.gif)文件一样被考虑,但它不是,并且没有直接的方法来获取二进制文件.可以使用类似的方法,以避免"图像共享数据库"中的重复,但它不是我想要做的.
Mathematica函数生成高斯模糊内核:
getKernel[L_] := Transpose[{L}].{L}/(Total[Total[Transpose[{L}].{L}]])
getVKernel[L_] := L/Total[L]
Run Code Online (Sandbox Code Playgroud)


事实证明,使用2遍向量内核,然后使用矩阵内核更有效.你的基于Pascal三角形不均匀的行:
{1d/4, 1d/2, 1d/4}
{1d/16, 1d/4, 3d/8, 1d/4, 1d/16}
{1d/64, 3d/32, 15d/64, 5d/16, 15d/64, 3d/32, 1d/64}
Run Code Online (Sandbox Code Playgroud)
源位的示例,可能有用:
获取定义矩形内的当前内容.
private Bitmap getContentBitmap() {
Rectangle r = f.r;
Bitmap hc = new Bitmap(r.Width, r.Height);
using (Graphics gf = Graphics.FromImage(hc)) {
gf.CopyFromScreen(r.Left, r.Top, 0, 0, //
new Size(r.Width, r.Height), CopyPixelOperation.SourceCopy);
}
return hc;
}
Run Code Online (Sandbox Code Playgroud)
获取位图的md5哈希值.
private byte[] getBitmapHash(Bitmap hc) {
return md5.ComputeHash(c.ConvertTo(hc, typeof(byte[])) as byte[]);
}
Run Code Online (Sandbox Code Playgroud)
获取图像的灰度.
public static Bitmap getGrayscale(Bitmap hc){
Bitmap result = new Bitmap(hc.Width, hc.Height);
ColorMatrix colorMatrix = new ColorMatrix(new float[][]{
new float[]{0.5f,0.5f,0.5f,0,0}, new float[]{0.5f,0.5f,0.5f,0,0},
new float[]{0.5f,0.5f,0.5f,0,0}, new float[]{0,0,0,1,0,0},
new float[]{0,0,0,0,1,0}, new float[]{0,0,0,0,0,1}});
using (Graphics g = Graphics.FromImage(result)) {
ImageAttributes attributes = new ImageAttributes();
attributes.SetColorMatrix(colorMatrix);
g.DrawImage(hc, new Rectangle(0, 0, hc.Width, hc.Height),
0, 0, hc.Width, hc.Height, GraphicsUnit.Pixel, attributes);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我认为您对此有几个问题:
问题#1:
许多图像可能因压缩、水印、丢失帧和添加剪辑而略有不同。我建议对视频进行采样。例如,您可能需要考虑对视频中图像的一小部分进行二次采样。此外,为了避免噪声图像和有损压缩算法的问题。您可能需要考虑对采样的帧进行灰度化,并进行高斯模糊。[高斯,因为它“更自然”(简短的回答)]一旦你有足够的子样本,你对视频的相似性有很好的信心,然后将其存储在数据库中。使用样本,您可以对它们进行散列,或者存储它们以便稍后进行%相似度。
问题 #2
您的数据源将影响您使用的工具包和库。我建议保持这个简单[用 gif 保存并创建自定义查看器,不要在开发逻辑时尝试编写浏览器插件]
问题 #3
强烈建议使用 Postgres [如果有很多大型对象] 或 SQLLite 来索引、存储和调用过去的元数据。
问题 #4
数据的大小将对召回、采样、查询数据库等产生巨大的决定。
总体建议:现阶段不要咬下超出你能承受的范围。从小处开始,然后逐渐成长。
另请参阅计算机视觉算法,以获取有关对象表示/召回的更多帮助。
| 归档时间: |
|
| 查看次数: |
595 次 |
| 最近记录: |