gpt4 book ai didi

image-processing - 图像匹配,仿射扭曲

转载 作者:太空宇宙 更新时间:2023-11-03 20:57:42 24 4
gpt4 key购买 nike

我的问题在这里显示:problem statement。我有一个模板图像,必须在相机图像中检测到。在检测到它之后,我必须使用仿射变换来规范化摄像机图像。我的工作目标是确定十字架。我尝试将SURF功能用于图像标准化步骤,但是模板图像非常规则,不利于SURF匹配。任何想法如何做到这一点?也许某种轮廓匹配?

最佳答案

因此,我对此进行了思考,然后意识到您正在寻找一张WHOLE机票,而不是该机票的子集,并将其转换为规则的矩形。这个问题(至少在理论上来说)并不是那么困难,并且自己编写一些代码来完成它相对微不足道。

到目前为止,最困难的部分将是初始拐角检测。因为您只对整个票证感兴趣,所以票证上的所有内容都没有任何意义。您只对四个角感兴趣。从图片中可以看到,当一张票躺在另一张票的顶部时,拐角并不明显。如果您所有的图片都是一张在非常黑暗的表面上放置的票证,那么这又是微不足道的,但是这样做的目的是编写一个可以处理甚至模棱两可的案件的应用程序。话虽如此,我建议采取以下方法:

1)使用图像滤镜使图像的亮区变亮,使图像的暗区变暗。

我忘了这种滤镜的名字是什么,但基本上,您希望在图像的较暗和较亮区域之间具有更大的对比度。

2)锐化给定亮度以上的所有区域,高斯模糊给定亮度以下的所有区域

特征发现算法通常依靠图像中的“清晰度”来检测拐角和边缘。通过锐化图像的所有较亮区域(考虑您的票证是白色的)并模糊图像的所有较暗区域,您将有更多机会通过算法检测所需的角。

3)使用特征检测来检测四个角

这是事情变得毛茸茸的地方。如果您要拍摄一堆乐透彩票,并且希望能够通过算法找到一张并显示无畸变的彩票,那么您正在谈论的是目前正在研究的尖端 Material 。如果这是您要尝试的操作,那么我建议您阅读一些Yanyan Liu的论文,尤其是基于平移对称的感知分组及其在城市场景中的应用。您很可能必须从机票的预制图片创建模板,然后尝试将该模板的确切功能与相机图像中相同功能的扭曲网格相匹配。一旦匹配度超过百分比阈值,则可以尝试找到它的四个角。如果成功找到它们,则可以继续进行下一步。

另一方面,如果您没有尝试做最前沿的工作,那么您就可以按书上进行一些功能检测。对于拐角检测,我建议使用The Harris&Stephens / Plessey / Shi-Tomasi拐角检测算法。这与Yanxi在她的许多论文中使用的算法相同,并且在角点检测方面做得非常好。我不确定该滤镜是否采用图像的灰度级,或者是否采用当前的色阶,但是如果使用了当前的色阶,则在使用拐角检测算法之前使用Canny边缘检测滤镜将是有利的。一旦(希望)检测到票证的主要角落,您将需要设计某种智能查找算法(基于照片的 Angular 和内容)以“猜测”哪些角落实际上是您关心的四个角落。

还值得注意的是,“均值转换信念传播”可以帮助您确定检测算法之后最重要的功能。基本上,您可以在给定的框内获取多个特征点,取其所有坐标的平均值,然后将框位于结果坐标的中心。如果移动后框中的新点,则再次进行。您将继续执行此操作,直到框中心有单个兴趣点为止。这是对这个想法的简短描述,因此我建议您进一步研究一下,因为我不知道平均的细节。

4)使用双线性插值法确定需要转移到最终图像上的颜色。

重要的是要注意,您不想从失真的图像中获取颜色。在图像上运行所有过滤器和检测算法的目的是找到您感兴趣的特征点。获得这些坐标后,您将返回使用原始图像提取颜色。

如果您要问这个问题,那么我想您知道双线性插值的含义。您可以考虑变形票证的顶部和底部边缘从0(左角)开始,到1(右角)结束。您应该考虑左右边缘从0(上角)开始,到1(下角)结束。您将对输出图像的尺寸应用相同的逻辑。在输出图像中逐像素移动,您将找到检索颜色所需的插值坐标,而使用双线性插值,则可以从输入图像中提取颜色。

就是这样! (大声笑)您要求做的事情涉及很多,我希望您能这样做。据我所知,创建一个在没有用户输入的情况下完美地在所有情况下做到这一点的算法几乎是不可能的。另外,您正在查看乐透彩票的事实也提出了这个项目的道德标准问题。无论如何,希望这足以使您的大脑开始。以下是一些其他链接:

Canny 边缘检测:http://en.wikipedia.org/wiki/Edge_detection

角点检测:http://en.wikipedia.org/wiki/Corner_detection

刘彦喜的论文:http://www.cse.psu.edu/~yanxi/

均值偏移信念传播:在我告诉过您的论文中使用

编辑

级别分离代码

int threshold = 128;
float percentChange = .5;
int oldr, oldg, oldb, newr, newg, newb, grayscale;

//Assuming that pixels is a 1D array of pixel objects that make up the image you're currently working with. Syntax is of Processing.org

for (int i=0; i<pixels.length; i++) {

oldr = red(pixels[i]);
oldg = green(pixels[i]);
oldb = blue(pixels[i]);

grayscale = Math.floor((oldr + oldg + oldb) / 3.0);

if (grayScale >= threshold) { //Brightness is above threshold, therefore increase brightness
newr = oldr + (255-oldr)*percentChange;
newg = oldg + (255-oldg)*percentChange;
newb = oldb + (255-oldb)*percentChange;
} else { //Brightness is below threshold, therefore increase darkness
newr = oldr - oldr*percentChange;
newg = oldg - oldg*percentChange;
newb = oldb - oldb*percentChange;
}

pixels[i] = color(newr,newg,newb);

}

关于image-processing - 图像匹配,仿射扭曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6679507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com