สิ่งที่ “deskew” (และทําไมมันสําคัญ)
Skew จะเกิดขึ้นเมื่อเอกสารถูกสแกนหรือถ่ายภาพในมุมเล็กน้อย (โดยปกติ ±0-5°) ผลลัพธ์: เส้นข้อความไม่แนวนอนขอบแนวตั้งจะถูกดัดและภาพมีหมุนซับซ้อน Deskiew เป็นกระบวนการของ การตรวจจับมุมสกรูและหมุนภาพกลับ ดังนั้นเส้นจะกลายเป็นแนวนอน/แนวตั้งอีกครั้ง
วิธีการบาดเจ็บท่อของคุณ
- **ความแม่นยําของ OCR ลดลง: ** บาซลีนเคลือบป้องกันการแบ่งสายการค้นหาและการจัดอันดับตัวละครมุมขนาดเล็กสามารถลดความถูกต้องอย่างมาก
- ** บาร์โค้ดไม่สามารถ decod:** สัญลักษณ์เชิงเส้นจํานวนมาก (เช่นรหัส 128/39) มีความไวต่อการหมุน การสแกนเกินไปช่วยลดการอ่านที่ประสบความสําเร็จ
- **การตรวจจับข้อบกพร่องและการจัดระเบียบ: การตรวจพบหน้าและตารางเส้นมักจะนําไปใช้กับภูมิศาสตร์ที่ใกล้ชิด
วิธีการ Aspose.Imaging Fixes Skew—อย่างถูกต้อง
Aspose.Imaging แสดงตัวอักษรที่แสดงให้เห็นในภาพส่องสว่าง:
RasterImage.NormalizeAngle()
— อัตโนมัติตรวจจับมุมสกรู (ใช้ภายในGetSkewAngle
) และหมุนภาพในสถานที่- อะไหล่:
NormalizeAngle(bool resizeProportionally, Color backgroundColor)
— เลือกว่าจะขยายช่องเพื่อเก็บเนื้อหาทั้งหมดและสีพื้นหลัง** จะเติมมุมที่สร้างขึ้นโดยการหมุน
นอกจากนี้ยังมีคู่ค้า Cloud & UI (REST และเครื่องมือออนไลน์) ที่แสดงให้เห็นถึงการทํางานเดียวกันถ้าคุณสร้างบริการหรือโปรโตคอล
ตัวอย่างเต็มรูปแบบ (copy-paste)
ตัวอย่างนี้แสดงให้เห็นว่าการประมวลผลก่อนที่ปลอดภัยและความแข็งแกร่งกับ Aspose.Imaging:
- ดาวน์โหลดสแกน (JPG / PNG / TIFF)
- ตัวเลือกแปลงเป็น grayscale & normalizes ความต้านทานสําหรับการตรวจจับมุมที่ดีขึ้น
- Calls
NormalizeAngle(resizeProportionally: true, background: White)
. - เก็บภาพที่รุนแรง
- โบนัส: แสดงให้เห็นวิธีการลบแต่ละหน้าใน TIFF มัลติหน้า
*ข้อกําหนด *
- .NET 8 (หรือ 6 +)
- หมายเลข:
Aspose.Imaging
using System;
using System.IO;
using Aspose.Imaging;
using Aspose.Imaging.FileFormats.Tiff;
using Aspose.Imaging.ImageOptions;
class Program
{
static int Main(string[] args)
{
if (args.Length < 2)
{
Console.WriteLine("Usage: dotnet run -- <inputImageOrTiff> <outputImageOrTiff>");
return 1;
}
string inputPath = args[0];
string outputPath = args[1];
try
{
using (var image = Image.Load(inputPath))
{
// Multi-page TIFF? Deskew frame-by-frame.
if (image is TiffImage tiff)
{
foreach (var frame in tiff.Frames)
{
// --- Optional: lightweight preprocessing for better angle detection ---
// Convert to grayscale-like statistics to reduce chroma noise.
// Many real scans already are gray/bilevel; if not, Normalize() helps.
TryNormalizeForDeskew(frame);
// --- Deskew ---
// true = expand canvas to avoid cropping
// White = fill color for the new corners created by rotation
frame.NormalizeAngle(true, Aspose.Imaging.Color.White);
}
tiff.Save(outputPath); // encoder inferred from extension
}
else
{
// Single-page raster image
var raster = image as RasterImage
?? throw new InvalidOperationException("Input is not a raster image.");
TryNormalizeForDeskew(raster);
raster.NormalizeAngle(true, Aspose.Imaging.Color.White);
// Choose encoder explicitly (e.g., PNG/JPEG/TIFF). Here we mirror input extension.
image.Save(outputPath);
}
}
Console.WriteLine($"✅ Deskew complete: {Path.GetFullPath(outputPath)}");
return 0;
}
catch (Exception ex)
{
Console.Error.WriteLine("❌ " + ex.Message);
return 2;
}
}
/// <summary>
/// Minimal, safe preprocessing to stabilize skew detection.
/// Avoid heavy blurs that can smear thin text.
/// </summary>
private static void TryNormalizeForDeskew(RasterImage raster)
{
// Ensure pixels are accessible (performance hint for subsequent operations).
raster.CacheData();
// If the image has wildly varying brightness (camera shots), a light contrast
// normalization can help align text lines for skew detection. The exact set
// of helpers varies by version; keep it simple and non-destructive.
//
// Tip: If your version exposes BinarizeOtsu/AdaptiveBinarize, try them
// *after* deskew for OCR workflows to preserve thin strokes.
// Example: If available in your build, uncomment one of these:
// raster.AdjustBrightnessContrast(brightness: 0, contrast: 10); // gentle contrast pop
// raster.Grayscale(); // reduce chroma noise if present
// Leave as-is if your scans are already clean (e.g., 300 dpi monochrome).
}
}
Why NormalizeAngle
ทํางานได้ดี
- มัน ตรวจจับมุมสกรูสําหรับข้อความสแกนทั่วไป (ใช้สถิติพื้นฐาน / edge) และ หมุน ในโทรเดียว
- อะไร
resizeProportionally
ตัวเลือกป้องกันไม่ให้ คอร์เนอร์ clipping และbackgroundColor
พารามิเตอร์ควบคุม สีเต็ม ของพื้นที่ที่สัมผัสใหม่
Multi-page TIFF deskew (สิ่งที่ดู)
- Run
NormalizeAngle
ต่อกรอบTiffFrame
เป็นหน้า raster ดังนั้น API ที่เดียวกันจะใช้ - เก็บครั้งเดียวในตอนท้ายและพิจารณาการบีบอัด ไม่สูญเสีย (เช่น LZW/Deflate สําหรับ RGB, CCITT Group 4 สําหรับ bilevel)
- หากคุณวางแผนที่จะ OCR จากนั้นให้หน้าใน 300 dpi (หรือสูงกว่า) เพื่อรักษา glyphs ขนาดเล็ก
เหล็กกล้าบัวทั่วไป - และวิธีการหลีกเลี่ยงพวกเขา
การขุดหลังการหมุนหากคุณหมุนโดยไม่ต้องขยายแถบมุมจะตัด ใช้
NormalizeAngle(true, Color.White)
เพื่อ ลดลงอย่าง proportional** backgrounds สกปรก trick the angle detector**ความเสียงรบกวนที่รุนแรงหรือ gradients สามารถพิสูจน์คํานวณมุม ทํา การปรับตัวแสง (การเชื่อมต่อหรือขอบสีเทา) ก่อนหน้านี้ แต่หลีกเลี่ยงการสั่นสะเทือนที่แข็งแกร่งที่กําจัดอาการปวดบาง
** ทั่วไบนารีสก์ท็อป**ความหนาแน่นที่หนักสามารถสร้างฐานลากระเหย; ล้างแรกแล้วไบนารีสําหรับ OCR ถ้าจําเป็น (คําแนะนําของ OCR มุ่งเน้นไปที่การแก้ไขการขุดล่วงหน้าในท่อ)
การสแกนรหัสบาร์โค้ดในมุมหนาหากบาร์โค้ดยังคงล้มเหลวหลังจากการเจาะ ตรวจสอบมุมไม่ได้ saturated; ไฟหนามากอาจต้องการการหมุนครั้งแรก / flip โดย metadata (EXIF) ก่อน
NormalizeAngle
.
FAQs
** Q: Deskew เปลี่ยนขนาดภาพหรือไม่****A:** ถ้าคุณผ่าน resizeProportionally: true
, แถบจะเติบโตเพียงพอเพื่อให้เนื้อหาทั้งหมด - ไม่มีการกัดกร่อน - เต็มมุมใหม่ด้วยสีที่คุณเลือก
Q: ฉันสามารถสํารองการตรวจจับมุมแรกได้หรือไม่****A: Deskew เป็นมักเป็น One-shot กับ NormalizeAngle
แต่ถ้าคุณต้องการมุมสําหรับการวิเคราะห์คุณสามารถวัดได้โดยใช้ APIs ที่เกี่ยวข้อง (เช่นผลิตภัณฑ์ OCR แสดงคํานวณมุม)
**Q: อย่างไรกับ Cloud / REST?**A: Aspose.Imaging Cloud แสดงให้เห็นว่า deskew
endpoint ถ้าคุณกําลังสร้างบริการแทนที่จะใช้ห้องสมุด .NET
Takeaways
- ** Skew ระยํา OCR, การอ่านรหัสบาร์และวิเคราะห์การตั้งค่า**
- Aspose.Imaging’s RasterImage.NormalizeAngle ให้คุณการแก้ไขที่รวดเร็วและน่าเชื่อถือด้วยโทรเดียวรวมถึงตัวเลือกเพื่อปกป้องข้อ จํากัด ของเนื้อหา
- ผสมการประมวลผลก่อนหน้านี้ gentle (ตัวเลือก) ด้วยการจัดเก็บข้อมูลต่อหน้า ** สําหรับ TIFFs จํานวนหน้าเพื่อเพิ่มความแม่นยําสูงสุด
ด้วยการปฏิบัติเหล่านี้แอป .NET ของคุณจะผลิตสแกนที่ชัดเจนและอ่านได้มากขึ้นและขั้นตอน OCR และรหัสบาร์ของคุณจะขอบคุณ
More in this category
- การเพิ่มประสิทธิภาพของ GIF ของ animated ใน .NET โดยใช้ Aspose.Imaging
- Optimize Multi-Page TIFFs for Archival in .NET ด้วย Aspose
- HEIC ไปยัง JPEG / PNG แปลงด้วย Aspose.Imaging สําหรับ .NET
- การเคลื่อนไหวที่ขับเคลื่อนข้อมูลใน .NET ด้วย Aspose.Imaging
- การบีบอัดภาพที่มีคุณภาพและไม่มีการสูญเสียใน .NET ด้วย Aspose.Imaging