我正在研究纠正页面(图像)的宽度、高度和角度的逻辑。
点r1、r2、r3在正确图像上,点d1、d2、d3是当前图像上的对应点。
我尝试了多种方法并最终解决了这个问题。
public System.Drawing.Bitmap CorrectFileDimentionsV2(System.Drawing.Bitmap bitmap, PagePoints pagePoints)
{
BitmapHelper bitmapHelper = new BitmapHelper();
var bitmapImage = bitmapHelper.Bitmap2BitmapImage(bitmap);
DrawingVisual MyPath = new DrawingVisual();
using (DrawingContext dc = MyPath.RenderOpen())
{
TransformGroup transform = new TransformGroup();
Point r1 = pagePoints.ADash;
Point r2 = pagePoints.BDash;
Point r3 = pagePoints.CDash;
Point d1 = pagePoints.A;
Point d2 = pagePoints.B;
Point d3 = pagePoints.C;
Vector vr21 = r2 - r1;
Vector vd21 = d2 - d1;
Vector vr31 = r3 - r1;
Vector vd31 = d3 - d1;
double y1 = Vector.CrossProduct(vr31, vr21) / vr21.Length;
double y2 = Vector.CrossProduct(vd31, vd21) / vd21.Length;
transform.Children.Add(new TranslateTransform(-r1.X, -r1.Y));
transform.Children.Add(new ScaleTransform(vd21.Length / vr21.Length, y2 / y1));
transform.Children.Add(new RotateTransform(Vector.AngleBetween(vr21, vd21)));
transform.Children.Add(new TranslateTransform(d1.X, d1.Y));
dc.PushTransform(transform);
dc.DrawImage(bitmapImage, new Rect(0, 0, bitmapImage.Width, bitmapImage.Height));
dc.Pop();
}
Image theImage = new Image();
DrawingImage dImageSource = new DrawingImage(dGroup);
theImage.Source = dImageSource;
using (MemoryStream ms = new MemoryStream())
{
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(ToBitmapSource(dImageSource)));
encoder.Save(ms);
using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(ms))
{
bmpOut = new System.Drawing.Bitmap(bmp);
}
}
return bmpOut;
}
我不会直接回答您的问题:但是对齐扫描图像的常用技术是使用仿射变换。它是一个基于 a,b,c,a',b',c' 的 3x3 矩阵方程。通过简单的矩阵乘法,您可以计算另一个图像系统中的每个坐标或对所有像素进行完整的变换。
很抱歉没有为您提供有效的示例。看https://www.graphicsmill.com/docs/gm/affine-and-projective-transformations.htm https://www.graphicsmill.com/docs/gm/affine-and-projective-transformations.htm and https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.matrixtransform?view=netframework-4.8 https://learn.microsoft.com/en-us/dotnet/api/system.windows.media.matrixtransform?view=netframework-4.8用于 WPF RenderTransform。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)