Основной алгоритм - использовать преобразование Хафа, чтобы найти линии, а затем попытаться сделать большинство линий горизонтальными. Вот базовый код http://www.sydlogan.com/deskew.html
В вашей ситуации вы можете нацелить преобразование на фрагмент изображения, который, как вы знаете, может иметь лучшую информацию. Например, если есть граница страницы - мне нужен пример, чтобы дать лучший совет.
Отказ от ответственности, я работаю в Atalasoft.
Наш инструментарий DotImage имеет встроенный инструмент для .NET и не требует отчислений для настольных приложений. Код будет:
AtalaImage img = new AtalaImage("imagefile.tif");
AutoDeskewCommand cmd = new AutoDeskewCommand();
AtalaImage resultImage = cmd.Apply(img).Image;
resultImage.Save("result.tif", new TiffEncoder(), null);
Или что-то похожее для многостраничных или других типов изображений.
Мы покажем, как интегрировать его с нашим элементом управления просмотра в этом видео (в 1:14)
http://www.atalasoft.com/products/dotimage/tutorials/capture/lesson4.aspx
Видео являются частью серии приложений для сканирования документов:
http://www.atalasoft.com/products/dotimage/tutorials/capture/lesson1.aspx
http://www.atalasoft.com/products/dotimage/tutorials/capture/lesson2.aspx
http://www.atalasoft.com/products/dotimage/tutorials/capture/lesson3.aspx