Шта је “дескеу” (и зашто је то важно)
Скев се јавља када се документ скенира или фотографише у лаганом углу (обично ±0-5°). Резултат: текстуалне линије нису хоризонталне, вертикалне ивице су затегнуте, а слика има суптилно ротацију. *Дескев је процес откривање угла скеирања и ротирање слике назад Дакле, линије поново постају хоризонталне / вертикалне.
Како скеу штети вашој цеви
- ОЦР прецизност пада: заглављене базелине спречавају сегментацију, проналажење линије и класификацију карактера; мале углове могу драматично смањити тачност.
- Баркоди не декодирају: Многе линеарне симбологије (на пример, Код 128/39) су осетљиве на ротацију; прекомерни скеј смањује успешне читања.
- Кропинг & распоред откривање прекида: Детекција краја странице и табелне линије често претпоставља близу ортогоналне геометрије.
Како Аспасе.Имање фиксира скеу — прецизно
Aspose.Imaging prikazuje one-call deskew na rasterim slikama:
RasterImage.NormalizeAngle()
— ауто-открива угао скеирања (унутрашњо користиGetSkewAngle
) и окреће слику на месту.- Преоптерећење :
NormalizeAngle(bool resizeProportionally, Color backgroundColor)
— изаберите да ли ћете проширити каучу да бисте задржали све садржаје и која ** боја позадине** испуњава углове створене ротацијом.
Постоје и облачни и кориснички инструменти (РЕСТ и онлине алат) који показују исту операцију ако градите услуге или прототипове.
Потпуни пример (копија пасте)
Овај пример показује безбедно препроцесирање и чврсто одвајање са Аппосе.Имајте:
- Преузмите скенирање (ЈПГ / ПНГ / ТИФФ).
- Опционално се конвертује у граискале и нормализује контраст за бољу детекцију угла.
- Calls
NormalizeAngle(resizeProportionally: true, background: White)
. - Сачува оштрину слике.
- ** Бонус:** показује како да одбаци сваку страницу у мулти-страница ТИФФ.
- Захтеви *
- .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
Dobro funkcioniše
- Он открива угао скеирања за типичан скринирани текст (користећи базелин/едге статистику) и ротате на једном позиву.
- У том
resizeProportionally
опција спречава ** корнер клипинг**, иbackgroundColor
параметар контролише полну боју ново изложених подручја.
Мулти-страница ТИФФ дескеу (што гледати)
- Run
NormalizeAngle
* по оквиру *;TiffFrame
је растер страница, тако да се исти АПИ примењује. - Сачувајте једном на крају; размотрите без губитка компресију (на пример, ЛЗВ / Дефлат за РГБ, ЦЦИТТ Груп 4 за биљке).
- Ако планирате да ОЦР касније, држите странице на 300 дпи (или више) да бисте сачували мале глифе.
Уобичајени пукотине - и како их избегавати
Кропинг након ротацијеАко ротирате без проширења канова, углови се резају.
NormalizeAngle(true, Color.White)
да се * резиме пропорционално *.** прљаве позадине трчају угао детекторТежак бука или градиенти могу биас угао процене. * ** светло нормализација (контраст твик или гроискале) пре отварања, али избегавају јаке блуре које елиминишу танке инсулта.
** Превише бинаризацијски дескев**Тврда граница може створити базелине; прво десквирати, а затим бинарни за ОЦР ако је потребно. (ОКР водич наглашава корекцију скеу рано у цеви.)
** Скенирање баркода у степ угловима**Ако баркодови и даље не успевају након отварања, проверите угао није засићен; врло оштри снимак може захтевати почетни ротација / флип по метаданима (ЕКСИФ) пре него што
NormalizeAngle
.
FAQs
Q: Da li deskew menja veličinu slike?* А: * Ако прођете resizeProportionally: true
, канави расту само довољно да држе све садржаје - не савијају - испуњавајући нове углове са вашом одабраном бојом.
Q: Da li mogu da otkrijem ugle prvo?*А: Дескев је обично један удар са
NormalizeAngle
, али ако вам је потребан угао за анализу, можете мерити користећи повезане АПИ (на пример, ОЦР производи излагају израчунавање угла).Q: Šta je sa Cloud/REST? *A: Aspose.Imaging Cloud приказује
deskew
коначна тачка ако градите услугу уместо да користите .NET библиотеку.
Takeaways
- Скев боли ОЦР, читање баркода и анализа распореда.
- Aspose.Imaging RasterImage.NormalizeAngle vam pruža brzu i pouzdanu popravku sa jednim pozivom, plus opcije za zaštitu granica sadržaja.
- Комбинујте препроцесирање џентле (опционално) са пер-страница дескеу за вишестранице ТИФФ-а како би се максимизирала тачност.
Са овим праксама, ваша .NET апликација ће произвести сјајније, читавије скенирање – а ваша доњег тока ОЦР и корака баркода ће вам захвалити.
More in this category
- Оптимизација анимираних ГИФ-а у .NET-у користећи Aspose.Imaging
- Оптимизирајте мулти-странице ТИФФ-а за архивирање у .NET-у са Асписом
- Анимације на основу података у .NET-у са Aspose.Imaging
- Бесплатна и квалитетно дефинисана компресија слике у .NET-у са аспозом.Имање
- Оптимизација високо резолуционих слика за мобилне и веб у .NET-у