gpt4 book ai didi

c# - 在大图像中查找 16x16 像素相同正方形的有效算法 - C#

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:30:12 25 4
gpt4 key购买 nike

我正在使用 C# 在 vi​​sual studio 2010 中编写一个软件。该软件的作用是在选择一个正方形后在图像中找到相同的正方形。每个正方形由 16x16 像素组成。我当前的算法从第一个像素开始,逐像素扫描整个图像,比较以确定与所选像素相同的像素方 block 。这真的很花时间。你能建议我更好的方法吗?

每个正方形也是有序的。所以它们以 0 - 16 - 32 - 48 开头

正方形不能从 5 或 65 等开始

谢谢

最佳答案

您可以缓存每个图像区域的校验和。然后,您只需检查与校验和是否相等的那些。

让我们假设每个图像都是 16x16 rgb 元素。您可以这样做(是的,它会出现整数溢出。)

所有这些都是伪代码 - 您应该能够将其转换为 C#。

向字段图像类添加一个 int,或者创建一个图像包装器,将 int 作为“校验和”

int checksum = 0
for each pixel in image {
checksum += pixel.red + pixel.blue + pixel.green
// you could do anything you wanted here, like
// checksum *= 17 + pixel.red
// checksum *= 17 + pixel.blue
// checksum *= 17 + pixel.green
// just make it "unique enough", like a hashcode
}
image.checksum = checksum

现在当你去搜索时,你可以这样去:

/**
* equals method before:
*/
boolean equals(image a, image b) {
for x = 0..15 do /* all 16 pixels in X */
for y = 0..15 do /* all 16 pixels in Y */
if a.getPixel(x,y) != b.getPixel(x,y) return false;
return true;
}

/**
* equals method after:
*.
boolean equals(image a, image b) {
/* this check lets you skip the loop in most cases */
/* still have to verify that the image is equal pixel for pixel though */
if a.checksum != b.checksum return false;
for x = 0..15 do /* all 16 pixels in X */
for y = 0..15 do /* all 16 pixels in Y */
if a.getPixel(x,y) != b.getPixel(x,y) return false;
return true;
}

关于c# - 在大图像中查找 16x16 像素相同正方形的有效算法 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5097912/

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