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