c# - 无法匹配相同图像大小但转移斑点图案的图像
问题描述
我正在尝试将图像与模板主图像匹配。所有图像的大小都相同,但图像中的斑点图案会发生变化。
我在 aforge 中尝试了 thresholdfilter,当缺陷表中的 blob 与模板图像完美对齐时,它可以很好地找到差异。如果有一点点变化,所有的斑点都被检测为缺陷(不同)。
var img1 = AForge.Imaging.Image.FromFile(@"compare2.jpg");
var img2 = AForge.Imaging.Image.FromFile(@"compare1.jpg");
// (* calculate absolute difference *)
var difference = new AForge.Imaging.Filters.ThresholdedDifference(15)
{OverlayImage = img1}
.Apply(img2);
// (* create and initialize the blob counter *)
var bc = new AForge.Imaging.BlobCounter();
bc.FilterBlobs = true;
bc.MinWidth = 5;
bc.MinHeight = 5;
// (* find blobs *)
bc.ProcessImage(difference);
// (* draw result *)
BitmapData data = img2.LockBits(
new Rectangle(0, 0, img2.Width, img2.Height),
ImageLockMode.ReadWrite, img2.PixelFormat);
Pen redPen = new Pen(Color.Red, 2);
foreach (var rc in bc.GetObjectsRectangles())
AForge.Imaging.Drawing.Rectangle(data, rc, Color.Red);
img2.UnlockBits(data);
imageBox1.Image = img2;
如何对齐 2 个图像以使图案始终完美对齐?
解决方案
如果您知道两个图像上第一个 blob 的坐标,则可以使用CanvasMove
filter 将它们完美对齐:
// create filter
CanvasMove filter = new CanvasMove(new IntPoint(
YOUR_X_DIFF, YOUR_Y_DIFF
), Color.Green );
// apply the filter
filter.ApplyInPlace( image );
您还可以查看尝试自动对齐图像的MoveTowards过滤器(如果我理解正确的话),描述听起来可能很有用:
此过滤器的结果是一个图像,它基于源图像,但以减少与覆盖图像的差异的方式进行了更新 - 源图像向覆盖图像移动
推荐阅读
- ios - 无法在 Xcode 中创建新的模拟器
- regex - 正则表达式,TextFSM - 匹配两个字符之间的内容,同时排除不需要的字符串列表
- swift - 隐藏默认初始值设定项参数名称
- python-3.x - Python 3 AttributeError:模块'sys'没有属性'argv'
- vue.js - 尝试在 nuxt 项目中安装外部 javascript 库(choreographer-js),但它不起作用
- c#-3.0 - 如何将 csharp 8 代码转换为早期版本
- ios - iOS 如何正确使用 simd_float3?
- scala - 在火花中将大型 DataFrame 保存为 json
- reactjs - 在 react js 中使用 api 从邮政编码自动填充州和城市
- python - 对于循环网络抓取网站会引发 timeouterror、newconnectionerror 和 requests.exceptions.ConnectionError