使用 ImageMagick 修復掃描圖像
多年前,在翻閱一家舊書店的書架上的內容時,我偶然發現了一本名為 《UNIX System Command Summary for Berkeley 4.2 & 4.3 BSD》 的小冊子,由 Specialized Systems Consultants 出版。我買它是出于好奇,因為它已經有將近 20 年的歷史了,但仍然在很大程度上適用于現代 Linux 和 BSD。
無論是當時還是現在,我都很開心。一本寫于 1986 年的小冊子在 2016 年仍然很重要,而同一個書架上關于專有操作系統的書籍并不值得印刷它們的紙張。(想一想:你認為什么技術可以在僵尸末日中幸存下來?)這本小冊子已經放在我自己的書架上好幾年了,但我突然想到可能值得對這個作品做一點數字保存,所以我決定掃描這本小冊子來創建一本 ??CBZ 電子書??。
使用 ??Skanlite?? 進行掃描很容易,但很耗時。然而,當我完成后,我發現有些頁面不是很平整。
A page of text, including a table of contents and a glossary, that is crooked and distorted
在打印中,這稱為配準問題,這意味著打印內容的位置在頁面上的方向不正確。
ImageMagick
??ImageMagick?? 是基于終端的非交互式圖形編輯器。嘗試在無圖形環境(如純文本終端)中編輯圖形似乎違反直覺,但實際上很常見。例如,當你將圖像上傳到 Web 應用用作個人資料圖片時,應用服務器上的腳本可能會使用 ImageMagick 或其庫處理你的圖像。非交互式編輯器的優點是你可以制定需要對示例圖像執行的操作,然后只需按一下按鈕即可將這些效果應用于數百個其他圖像。
ImageMagick 通常與其他圖形編輯器一樣強大,只要你花時間了解它的許多功能以及如何組合它們以實現所需的效果。在這種情況下,我想旋轉歪斜的頁面。在搜索了 ImageMagick 的文檔后,我發現我需要的解決方案的 ImageMagick 術語稱為糾偏。將你的術語與其他人的術語保持一致對于你不知道的任何事情都是一個挑戰,因此當你使用 ImageMagick(或其他任何東西)時,請記住,你描述問題或解決方案的用詞可能和別人不一樣。
要使用 ImageMagick 對帶有彎曲文本的圖像進行校正:
??-deskew?
? 選項表示可接受偏差的閾值。通過跟蹤看似字母的對象的峰谷來確定傾斜。根據掃描的彎曲程度,你可能需要多于或少于 25% 的閾值。我已經達到了 80%,到目前為止,低于 25% 沒用效果。
結果如下:
The same page of text, now with the text properly aligned
修復了!將其應用于文檔的剩余 55 頁以修復傾斜的頁面,而對已經筆直的頁面不做任何事情。換句話說,由于我的閾值設置,在不需要調整的頁面上運行此命令是安全的。
使用 ImageMagick 裁剪圖像
在糾正了歪斜之后,因為我掃描每一頁都比必要的范圍要多,以防止意外切斷單詞,我認為裁剪我糾正的頁面是有意義的。我很高興在頁邊空白處保留一些空間,但沒有以前那么多。我經常使用 ImageMagick 的“裁剪”功能來處理這個網站上的圖像,所以我很熟悉這個選項。但是,我需要確定如何裁剪每一頁。
首先,我需要圖像的大小:
知道尺寸后,我能夠對我可以承受的丟失多少像素做出一些估計。經過幾次試運行,我得到了這個:
這并不完全適合,但當我將它應用于冊子中的其他圖像時,它被證明很重要。這些頁面的內容和掃描儀位置各不相同,所以我很高興給每一頁一點空余空間。
這是校正和裁剪的圖像:
The same page of text, with the previous fixes applied and crooked white margins around the page cropped out.
使用開源批量編輯圖像
ImageMagick 的美妙之處在于,當你確定了修復圖像的公式,你就可以將該修復應用于需要相同修復的所有圖像。我使用 ??GNU Parallel?? 執行此操作,它使用我所有的 CPU 內核來完成數百頁的圖像校正。這并不需要很長時間,而且結果不言而喻。更重要的是,我已經有了一個 UNIX 歷史上有趣作品的數字檔案。