Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 两幅图像相似-测量_Image Processing_Opencv_Machine Learning_Computer Vision - Fatal编程技术网

Image processing 两幅图像相似-测量

Image processing 两幅图像相似-测量,image-processing,opencv,machine-learning,computer-vision,Image Processing,Opencv,Machine Learning,Computer Vision,我必须决定,如果两个图像(一个模板图像,一个扭曲图像)几乎相似。图像的亮度可能会有所不同,上面会有一些标记或不同的数字。也可能是扭曲的图像偏移了1或2个像素。(参见我的示例图片!) 我怎样才能解决这个问题?我正在使用OpenCV/C++。如果可以的话,我会提前选择一些基准点,并找到它们的位置和相对位置。确保有正确的编号,且其布局“足够接近”。这些示例中的基准点示例有“左上角的红色三角形”、文本标题等。我很确定,图像的全局度量值不会单独起作用。特别是,要找出这些数字是否相同,对于图像范围的度量是不

我必须决定,如果两个图像(一个模板图像,一个扭曲图像)几乎相似。图像的亮度可能会有所不同,上面会有一些标记或不同的数字。也可能是扭曲的图像偏移了1或2个像素。(参见我的示例图片!)


我怎样才能解决这个问题?我正在使用OpenCV/C++。

如果可以的话,我会提前选择一些基准点,并找到它们的位置和相对位置。确保有正确的编号,且其布局“足够接近”。这些示例中的基准点示例有“左上角的红色三角形”、文本标题等。

我很确定,图像的全局度量值不会单独起作用。特别是,要找出这些数字是否相同,对于图像范围的度量是不起作用的。 我的第一个猜测是,至少进行三步程序

1.找到角落里的黑色标记 我不知道你们在图像配准方面有多少背景,但这可能适用于非常轻的版本。分别搜索每个黑色标记。首先稍微平滑图像(可能是r=1的高斯图像)以抑制噪声,然后使用非常低的阈值对图像进行二值化,以消除几乎所有“非黑色”部分。这张照片看起来像这样

你看,那些周围没有任何标记的标记正是为这些应用而做的。现在,我能想象的最简单的版本可能是这样的:在每个角落取一个合理的区域。合理的方法,黑色标记肯定在那里。现在计算所有黑色像素位置的平均值。这是你对一个黑色标记中心的猜测。在上面的例子中,这个猜测是完美的,应该给出真实的中心。但是,如果图像质量不好,则该区域可能存在噪声/错误的黑色像素

在这种情况下,可能需要严格的注册步骤。由于您只尝试查找黑色方块,因此此注册应该不太难实现

2.寻找数字 当您找到黑色的角点标记时,您知道这些标记跨越一个矩形,您可以计算出重要数字所在的区域。如果好的图像真的只有一些像素,那么这个步骤可能是不必要的,你可以为你的数字选择固定的区域

例如,请参见右下角的数字:它总是直接位于底部标记之间,在右侧,范围从底部标记之间长度的1/4到几乎右侧标记。您必须更好地测量该区域,但是给定标记位置,您可以根据黑色标记来表示该区域

3.比较数字区域(字符识别) 正如在开始时提到的,我不确定通过图像度量对整个区域的两个数字区域进行比较是否足够好。当然,你可以试试看它是否有效。但我怀疑1和7之间的差异是否如此之大,以至于你可以肯定地说,这些区域匹配还是不匹配


既然可以很好地提取数字区域,为什么不使用一些基本的OCR,而不是比较数字图像,而是比较数字本身呢?

如果这些图像具有代表性,我建议对红色通道进行阈值设置,并计算水平和垂直投影的直方图(分别沿行和列的平均值)。匹配查询图像的直方图应该与原型图像的直方图相当接近。

我研究了一个类似的问题,我们使用了许多仿射变换来比较模板图像中网格的图像空间与扭曲图像中网格的图像空间。我想一旦你可以“取消扭曲”图像处理的其余部分应该更简单

正如halirutan所指出的,您已经有了一些基准标记。标准化互相关应该可以很容易地识别出那些暗正方形。它们为最粗糙的仿射变换定义了四个比较点。

在模板和扭曲图像之间进行粗略仿射变换后,可以使用相对较小的搜索区域在每个网格的左上角查找三角形基准点。由四个相邻三角形(或四个红线交点)形成的四边形然后,可以使用扭曲图像中的图像来找到将该网格空间与模板图像中的匹配网格空间关联的仿射变换

在模板图像中的每个栅格和扭曲图像中的每个栅格之间进行仿射变换后,可以取消扭曲图像中的像素的扭曲,并执行其他处理

  • 仅在一个颜色平面中操作(例如,RGB中的红色)
  • 找到一个局部阈值(例如移动平均值)以对颜色平面进行二值化。局部或自适应阈值技术应消除变化的背景强度。对于示例图像,全局阈值可能不是最佳选择
  • (可能)执行变形关闭操作以简化形状
  • 使用网格识别像素的相对密度(这类似于标准化互相关,但将区域分割为网格正方形)
  • (或)使用简单的图像纹理度量(如纹理度量)进行比较

  • 您对采集过程没有控制权吗?我的意思是,为什么图像会扭曲/扭曲?这一步已经完成了!但我必须检查是否出现问题。您为什么要从问题中删除示例图像?请将它们放回!