ما هو “Deskw” ( ولماذا يهم)
Skew يحدث عندما يتم فحص المستند أو التقاطه في زاوية خفيفة (عادة ±0–5°).النتيجة: خطوط النص ليست أفقية، يتم تثبيت الحواف الرأسي، والصورة لديها تدور صغير. الكشف عن زاوية الخرسانة وتدوير الصورة إلى الوراء ثم تصبح الخطوط أفقية / عمودية مرة أخرى.
كيف يؤذي البراغيث خط أنابيبك
- ** انخفاض دقة OCR:** البازلين المطاطية تمنع الانقسام، والعثور على الخط، وتصنيف الشخصيات؛ زوايا صغيرة يمكن أن تقلل الدقة بشكل كبير.
- لا يستطيع الباركود إزالة التخزين: العديد من الرموز الخطية (على سبيل المثال، رمز 128/39) حساسة للتحول؛ والخياطة المفرطة تقلل من القراءات الناجحة.
- الانهيار والتخطيط اختلالات الكشف: كشف حافة الصفحة والكشف عن خط الطاولة غالبا ما يفترض الهندسة القريبة من الأرثوذكسية.
كيف Aspose.Imaging تصحيح الخرسانة – دقيقة
Aspose.Imaging يعرض صورة 1 مكالمة واحدة على صور الرسوم البيانية:
RasterImage.NormalizeAngle()
- الكشف التلقائي عن زاوية الخرسانة (يستخدم داخليًا)GetSkewAngle
) وتدور الصورة في مكانها.- المبالغ الزائدة :
NormalizeAngle(bool resizeProportionally, Color backgroundColor)
- اختيار ما إذا كنت ترغب في توسيع قوس قزح للحفاظ على كل المحتوى وما هو اللون الخلفي يملأ الزوايا التي تم إنشاؤها عن طريق الدوران.
هناك أيضًا أقسام Cloud & UI (REST والأدوات عبر الإنترنت) التي تظهر نفس العملية إذا كنت تقوم ببناء الخدمات أو النماذج الأولية.
نموذج كامل (Copy-Paste)
هذا المثال يظهر آمنة قبل المعالجة ومقاومة قوية مع Aspose.Imaging:
- تحميل الفحص (JPG / PNG / TIFF)
- تحويل اختياري إلى مقياس رمادي وتطبيع التباين للحصول على اكتشاف زاوية أفضل.
- 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
يعمل بشكل جيد
- يكتشف زاوية التمرير للنص الماسح النموذجي (باستخدام الإحصاءات الأساسية/السلسلة) و تدوير في مكالمة واحدة.
- و هو
resizeProportionally
الخيار يمنع الشريط الزاوية، وbackgroundColor
يسيطر المعلم على اللون الممتلئ للمناطق التي تم التعرض لها حديثًا.
TIFF Deskew متعددة الصفحات (ماذا مشاهدة)
- Run
NormalizeAngle
* لكل إطار *TiffFrame
هو صفحة راستر ، لذلك ينطبق نفس API. - تخزين مرة واحدة في النهاية؛ فكر في ضغط بدون خسارة (على سبيل المثال، LZW/Deflate for RGB، CCITT Group 4 for bilevel).
- إذا كنت تخطط لـ OCR في وقت لاحق ، فاحفظ الصفحات عند 300 dpi (أو أعلى) للحفاظ على غلافات صغيرة.
الحصى الشائعة - وكيفية تجنبها
الصراصير بعد الدورانإذا كنت تدور دون توسيع الأقواس ، يتم قطع الزوايا.
NormalizeAngle(true, Color.White)
* تراجع نسبياً *.** الخلفيات القذرة خدعة الكشف عن الزاوية**يمكن أن يضرب الضوضاء الشديدة أو الجرادينات تقدير الزاوية.فعل التطبيع الخفيف (مقاييس التباين أو الصخرة) قبل الانحناء، ولكن تجنب البراغيث القوية التي تزيل السكتة الدقيقة.
مقاصد التخفيضات الزائدةالحد الأقصى الصلب يمكن أن يخلق البازلين المطحونة؛ أولاً، ثم ثنائية لـ OCR إذا لزم الأمر. (تؤكد إرشادات OCR تصحيح التخفيف في وقت مبكر في خط أنابيب).
مشاهدة الباركود في زوايا متقلبةإذا كانت رموز الشريط لا تزال فاشلة بعد الانزلاق، والتحقق من أن الزاوية لم تكن مملوءة؛ قد تحتاج النقاط الضيقة للغاية إلى الدوران الأول/التدفق عن طريق البيانات الميتا (EXIF) قبل
NormalizeAngle
.
FAQs
س: هل يتغير حجم الصورة؟** A: * إذا كنت تفعل ذلك
resizeProportionally: true
، تنمو الأقواس بما فيه الكفاية للحفاظ على كل المحتوى - لا الحصاد - ملء الزوايا الجديدة مع لونك المختار.س: هل يمكنني الكشف عن الزوايا أولاً؟*A: Deskew هو عادة واحد ضرب مع
NormalizeAngle
ولكن إذا كنت بحاجة إلى زوايا لتحليل، يمكنك قياس باستخدام APIs ذات الصلة (على سبيل المثال، منتجات OCR يعرض حساب الزاوية).
** س: ماذا عن السحابة / REST؟**A: Aspose.Imaging Cloud يعرض deskew
نقطة النهاية إذا كنت تبني خدمة بدلا من استخدام مكتبة .NET.
Takeaways
- الخياطة تؤلم OCR، قراءة الباركود، وتحليل التصميم.
- Aspose.Imaging’s RasterImage.NormalizeAngle يمنحك إصلاحًا أسرع وموثوق به مع مكالمة واحدة بالإضافة إلى خيارات لحماية حدود المحتوى.
- مزيج المعالجة المسبقة (اختياري) مع للصفحة الواحدة لـ TIFFs متعددة الصفحات لتحقيق أقصى قدر من الدقة.
مع هذه الممارسات ، ستقوم تطبيقات .NET الخاصة بك بإنتاج فحوصات أكثر وضوحًا وأكثر قراءة - وسوف تشكرك خطوات OCR والرمز الشريط المنخفض.