【发布时间】:2018-09-19 10:37:02
【问题描述】:
我是图像处理的新手。我有一部分图像,我必须通过比较像素在整个图像中进行搜索。我需要获取完整图像中存在的小图像的坐标。
所以,我在做
for int i = 0 to Complete_Image.Lenght
for int j = 0 to Complete_Image.Height
for int x = 0 to Small_Image.Lenght
for int y = 0 to Small_Image.Height
if Complete_Image[i+j+x][i+j+y] == Small_Image[x][y]
Message "image found at coordinate x, y"
Break
它是一种简单的像素匹配算法,通过比较像素在完整图像中找到图像的某一部分。
这非常耗时。例如,如果我必须在 1000 X 1000 图像中找到 50X50 图像的坐标,则需要进行 1000 X 1000 X 50 X 50 像素的颜色比较。
所以:
- 有没有更好的方法在 C# 中进行图像比较?
- 我可以使用 AMD Radeon 460 GPU 并行地做这个比较吗?或者至少部分算法使用了 GPU 能力?
【问题讨论】:
-
即使没有 GPU,您也可以达到闪电般的速度。通过使用一些智能、固定内存、指针访问和并行处理。不管gpu与否,你如何做这将加快它的速度。你当前的算法时间复杂度大,效率低
-
两张图像的像素多久完全匹配?您确定这是您想要的搜索类型吗?
-
只有一个完全匹配。我有一部分屏幕截图,我必须在完整的屏幕截图中找到它并获取它的坐标。只有一个完全匹配。是否有更好的算法和/或 GPU 处理?
-
显然 gpu 会更快,这取决于你想走多快,对于 5000*3000 图像寻找 300*300 图像,我在 10 分之一秒内得到它,在非 gpu 中没有并行.,与原始算法相反,其运行时间约为 10 秒。但是我只是在调整一个并行版本,所以我应该能够再次更快地获得它
标签: c# visual-studio opencl gpu