Što je “deskew” (i zašto je to važno)
Skew se događa kada se dokument skenira ili fotografira na laganom kutu (obično ±0-5°).Rezultat: tekstne linije nisu horizontalne, vertikalni krajevi su tijeljeni, a slika ima subtilnu rotaciju. Deskev je proces otkrivanje ugla skiva i okretanje slike nazad Tako linije ponovno postaju horizontalne/vertikalne.
Kako šljunčanje boli vaš plinovod
- OCR točnost padne: oštećene bazeline ometaju segmentaciju, pronalazak linije i klasifikaciju karaktera; mali kutovi mogu dramatično smanjiti preciznost.
- Barcode ne dekode: Mnoge linearne simbologije (npr. Koda 128/39) su osjetljive na rotaciju; prekomjerno skijanje smanjuje uspješne čitanja.
- Croping & layout detection break: detekcija krajeva stranice i tablica linije često podrazumijeva geometriju u blizini pravogona.
Kako Aspose.Imaging ispravlja skijanje – točno
Aspose.Imaging prikazuje one-call deskew na rasterim slikama:
RasterImage.NormalizeAngle()
- auto-detekcija ugla skiva (u unutrašnjosti se koristiGetSkewAngle
i okrenuti sliku na mjesto.- Prekomjerno opterećenje:
NormalizeAngle(bool resizeProportionally, Color backgroundColor)
— odaberite hoće li proširiti kanvu kako bi se sačuvala sva sadržaja i koja ** boja pozadine** ispunjava kutove stvorene rotacijom.
Postoje i Cloud & UI kolege (REST i online alat) koji prikazuju istu operaciju ako gradite usluge ili prototype.
Kompletni primjer (copy-paste)
Ovaj primjer pokazuje sigurnu preprocesu i čvrstu iscjedku s Aspose.Imaging:
- Preuzimanje skeniranja (JPG / PNG / TIFF)
- Opcionalno se pretvara u grayscale i normalizira kontrast za bolju detekciju ugla.
- Calls
NormalizeAngle(resizeProportionally: true, background: White)
. - Uštedi ojačanu sliku.
- Bonus: prikazuje kako otkloniti svaku stranicu u multi-page TIFF.
- Vrijednosti *
- .NET 8 (ili 6+)
- Slijedeći :
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
Dobro djeluje
- detekira uglu skijanja za tipični skenirani tekst (koristeći bazalnu/edge statistiku) i rotates u jednom pozivu.
- Tko je
resizeProportionally
opcija sprečava corner clipping, abackgroundColor
parametar kontrolira ** punu boju** novo izložene površine.
Multi-page TIFF deskew (što gledati)
- Run
NormalizeAngle
* na raspolaganje *;TiffFrame
je raster stranica, tako da se isti API primjenjuje. - Uštedite jednom na kraju; uzmite u obzir bez gubitka kompresije (na primjer, LZW/Deflate za RGB, CCITT Grupa 4 za bilevel).
- Ako planirate OCR kasnije, držite stranice na 300 dpi (ili veće) kako biste sačuvali male glifove.
Uobičajeni otpadni padovi - i kako ih izbjeći
Korupcija nakon rotacijeAko se okrenete bez proširenja kanve, kutovi se smanjuju.
NormalizeAngle(true, Color.White)
Slijedeći članakRazmjerava se proporcionalno*Smrtne pozadine trikuju detektor uglaTeški zvuk ili gradijenti mogu potkopati procjenu ugla. ** normalizacija svjetla** (kontrastni šljunčad ili grayscale) prije iscjedka, ali izbjegavajte snažne blure koje uklanjaju tanke udare.
- Prekomjerna binarizacija*Teško ograničavanje može stvoriti zagušene bazele; najprije iskopati, a zatim binarizirati za OCR ako je potrebno. (OCR smjernice naglašavaju korekciju skijanja rano u cjevovodu.)
Skaniranje barkoda u stepnim kutovimaAko barkodi još uvijek ne uspiju nakon ispuštanja, provjerite da uglo nije zasićeno; vrlo glatke snimke mogu zahtijevati početnu rotaciju/flip po metapodatima (EXIF) prije
NormalizeAngle
.
FAQs
**Q: Hoće li deskew promijeniti veličinu slike?**A: Ako prolazite resizeProportionally: true
, kanve rastu samo dovoljno da čuvaju sve sadržaje – bez uzgajanja – ispunjavajući nove kutove vašom odabranom bojom.
**Q: Mogu li najprije otkriti kutove?**A: Deskew je obično jedan pucnjava s NormalizeAngle
, ali ako vam je potrebna ugla za analizu, možete mjeriti pomoću povezanih API-a (na primjer, OCR proizvodi izložuju izračun uglova).
**Q: Što je s Cloud/REST?**A: Aspose.Imaging Cloud prikazuje deskew
konačna točka ako gradite uslugu umjesto korištenja .NET knjižnice.
Takeaways
- Skew boli OCR, čitanje redovnog koda i analiza rasporeda.
- Aspose.Imaging RasterImage.NormalizeAngle daje vam brz, pouzdan popravak s jednim pozivom, plus opcije za zaštitu granica sadržaja.
- Kombinirajte gentle preprocesiranje (opcionalno) s per-page deskew za više stranica TIFF-a kako bi se maksimalna točnost ostvarila.
S tim praksama, aplikacije .NET-a će proizvesti brži, čitljivije skeniranje – a vaša downstream OCR i barkoda će vam zahvaliti.
More in this category
- Optimizacija animiranih GIF-a u .NET-u pomoću Aspose.Imaging
- Optimizacija multi-page TIFF-a za arhiviranje u .NET-u s Aspose-om
- Animacije na temelju podataka u .NET-u s Aspose.Imaging
- Bez gubitaka i kvalitetno definirana kompresija slike u .NET-u s Aspose.Imaging
- HEIC na JPEG/PNG Konverzija s Aspose.Imaging za .NET