圖像編程精髓

圖像編程精髓

《圖像編程精髓》是一本聯駿編制,由電子工業出版社在2006.06出版的書籍。

內容介紹

本書以開發PhotoSprite(一種包含Photoshop核心圖像處理功能的軟體)為講解對象,深入剖析圖形圖像編程技術知識,取材新穎、內容豐富、循序漸進、圖文並茂,是一本實用性很強的專業用書。

本書不僅介紹入門知識,還詳盡介紹複雜的算法技巧。在講述PhotoSprite圖像軟體的各項功能操作和實現原理的同時,還提供了典型的套用場合和貼切的效果點評。讀者不僅能掌握製作精美圖像效果的技巧,並精通實現這些效果的編程技術,還能開拓思路、舉一反三,自行創作出更加出類拔萃的設計方案。

本書適合各類想深入掌握圖形圖像編程技術的開發者閱讀,儘管本書採用Visual C#來講解,但是涉及到的核心算法都是相通的。相信平面設計、圖像處理、醫學成像、分子化學、地理信息、衛星雲圖、遊戲開發和影視廣告等領域內的廣大工程技術人員和編程愛好者都會喜歡本書的內容。

前言

歡迎進入計算機圖形設計和圖像處理的精彩世界。當今是一個熱衷於用圖形和圖像表達信息的時代。可視化技術無時無刻不在影響著我們的工作、學習、生活、行動和思想觀念。

面對街頭高掛的廣告牌,看到CCTV正在播放的“快樂驛站”,回味《星戰》里震撼的特技場景,都給我們留下深刻印象。它們是怎么完成的?核心的技術是什麼?我能夠實現嗎?……我們不得不求助於圖形設計與圖像處理的最底層的核心技術。

古語說:“授人以魚,三餐之需;授人以漁,終生之用”。指導讀者進行平面設計,並提供操作方法,這種“授人以魚”的做法掃除不少朋友進入平面設計領域的心理阻礙,增加他們的學習信心。但要從根本上解決他們的疑惑,關鍵還是要“授人以漁”,教給他們“捕魚”的方法,讓他們在圖形圖像的海洋中搏擊,去捕獲一條條“大魚”。本書內容詳盡,覆蓋面廣,既介紹平面設計,又講解實現原理。可謂不僅送您“魚”,還教您“捕魚”。

值得一提的是,本書配套軟體PhotoSprite是根據Microsoft剛剛發布的Visual Studio 2005進行開發的,完全用C#語言進行編寫,同時本書還提供相關網站(http://www.PhotoSprite.com)與讀者交流,並為讀者答疑。作為Visual Studio 2005的體驗性教程,本書便於程式設計師自學和實踐,同樣也適合其他非C# 語言程式設計師閱讀,即便沒有基礎的入門者,閱讀本書也不會有太大困難。

C#作為一種功能強大,且易於使用的面向對象程式語言,在.NET開發平台中占有極其重要的地位,被稱為.NET的正統開發語言。熱衷於C#語言的人都會喜歡上Visual C# 2005,它是Visual Studio 2005的一個重要成員,帶來了大量令人興奮的新功能,例如泛型、局部類和匿名方法等。其他的新功能同樣是對.NET開發寶庫的重要補充。與C#的第一個版本相比,增加這些功能和語言將會提高您的整體生產效率,從而使您能夠以更快的速度寫出更加簡潔的代碼。

由於Visual Studio 2005剛剛發布,並且還在不停地升級和完善中,這方面可供參考的資料十分匱乏,加上作者水平有限,時間緊迫,所以書中難免會有疏漏和錯誤之處,我們真誠地歡迎讀者來信指正。

本書不是連載小說,不必一頁頁讀下去才會找到感覺,您甚至不需要按順序進行閱讀,所有的內容都被分門別類,每一個效果都相當獨立,不過章節之間會彼此聯繫,所以在閱讀時可先從感興趣的章節開始,然後遵循實現思想,進一步讀下去。

一本技術書籍的價值往往並非限於初次閱讀帶來的愉悅,更重要的是它能否成為日後編程過程中的左右手。本書除了是一本很好的自學讀本外,還是一本非常好的參考手冊,倒不是因為它面面俱到(那是Adobe或Microsoft的責任),而是因為它講述了許多別處很難見到,但在實際項目開發中又非常重要的高級技巧。如果您想成為一名圖形圖像程式設計的高手,請不要錯過這本書。

2006年4月於南京

本書導讀

1.誰是本書的讀者

本書適合於一切熱衷於圖像處理、醫學成像、衛星雲圖、遊戲開發和影視廣告等領域內的廣大專業技術人員和平面設計愛好者。

為了閱讀本書,您至少應了解Windows編程方面的基本知識,掌握數字圖像處理和計算機圖形學方面的專業知識。同時,還需要具備數學分析、線性代數、空間解析幾何和機率論等數學基礎。

然而,這幾方面的要求都是次要的,關鍵是您必須要有學習圖形圖像程式設計的動力和決心,這樣您才有能力獲得(或已經獲得)這些知識和編程經驗。

本書所有程式都需要您親自動手去實踐,一切從零開始。儘管書中有些算法比較複雜,然而閱讀全書將是十分輕鬆的。第一,對於任何圖像處理效果,筆者都是嚴格按思路進行講解的;第二,對於圖像處理的相關基礎知識和算法,本書相應的地方都有必要的介紹。

筆者的出發點是:讓您在一個輕鬆的環境下閱讀本書,絕不會要求您在閱讀時,旁邊要放一大堆關於平面設計、數字圖像處理、計算機圖形學和基礎數學等方面的書籍。

2.從本書獲得什麼

平面設計和程式開發是當前IT行業兩大熱點問題,它們相互依賴、共同發展。本書將用全新的觀念和您一起探索這兩個令人興奮的主題,並使您有機會掌握圖像處理最基本的編程技術和設計思想,有助於您成為一個專業的圖形圖像程式設計員。

通過對本書的學習,您將會獲得以下幾方面的收穫。

l 使用和開發Photoshop其實是一件十分有趣的事情。

l 所有的代碼都向您開放,更有線上技術支持為您排憂解難。

l 清楚圖像處理程式設計的基本流程,一切從零開始。

l 平面設計和圖像編程相互依賴,結合這兩種技術將做得更好。

l 開發圖形圖像程式,將有助於提高挑戰和競爭意識。

l 獲得解決複雜問題的組織經驗,更加重視數學和設計思想。

l 由於知道技術開發的核心原理而比別人更有潛力。

3.本書的特點

本書採用循序漸進的方法,遵循由概念、算法到編程實踐的步驟,介紹了套用Visual Studio 2005開發圖形圖像軟體的技術過程,力求做到既介紹基本知識又提煉編程思想。

(1)豐富的內容

全書以開發PhotoSprite為主線,既涉獵平面設計知識,又深入圖像處理技術。通過經典的案例向大家介紹實用圖像處理過程中最核心的編程技術。

事實上,平面設計和程式開發都在不斷地向前發展。平面設計豐富了人們的視覺世界,而程式開發又為圖像處理提供了方法和思路。本書將這兩種技術完美地結合在一起。

全書中所有案例力求做到四點:第一,統一的編程模式;第二,突出設計思想;第三,力求代碼簡潔;第四,取材新穎、圖文並茂。

(2)有價值的指導

寫作本書就要體現出它的價值。全書融合最新的圖形圖像程式設計思想,力求使案例具有趣味性、普遍性、實用性和高效性。

本書提供的所有方法函式都是一次性製作而成的。讀者朋友可以參考這些代碼及實現它的算法,從中獲得一些有益的啟示。其中類、屬性、方法、變數命名及其作用都很講究,請仔細品味。

(3)豐富的解說

本書通過圖文並茂的方式對案例所涉及的概念、算法和編程思想等均作了詳細的解釋。對於書中所示例的代碼,有精確的注釋和重要的解說。對於軟體原始碼,從變數到方法均有詳盡的說明。

(4)輕鬆地閱讀

本書將面向對象的編程技術直接套用於數字圖像處理中,並按知識和功能進行細化,建立通用的圖像處理函式,從而減少閱讀的繁瑣性,增加代碼的可重用性和可移植性,提高開發效率。對於複雜的類,書中用文字的形式示出其功能。

程式的所有代碼一律採用規範的編碼風格。在很多地方,我們都可以對變數名見名知意。本書堅持將“無障礙閱讀”放在第一位。

(5)完美的介紹

對於本書的絕大多數案例,都提供實現原理,並嚴格按設計思路去建立。絕不會在中途遺漏步驟,出現“猶抱琵琶半遮面”的現象,也不會草草收場,以致阻礙閱讀和後繼開發。

按照書中的設計思路將不僅有助於加快閱讀進程,而且一定能夠建立一個完整的圖像處理應用程式。

(6)開放式的結構

所有新建立的多層次類結構都是有助於讀者理解、修改和維護的。所有的類都是開放的,可以向其中添加新方法以支持新功能,而不會對原有功能構成任何威脅,這就是面向對象的優勢。

(7)良好的互動性

本書的主要內容為圖像處理程式設計,所有的類都具有很好的通用性。同時,它們都支持互動程式設計,均提供外部數據傳輸接口。

良好的互動性還體現在PhotoSprite的界面上:第一,PhotoSprite允許您處理自己的圖像檔案,而不僅僅局限於只能處理本書所提供的示例圖像;第二,可以用選單或對話框等方法選擇不同的處理算法。

4.本書的結構安排

本書共分8章,取材新穎、內容豐富、循序漸進和圖文並茂是本書的重要特色。

第1章為開篇語,主要對全書作總體介紹。其中包括預覽PhotoSprite軟體界面,了解Visual Studio 2005的新特性,明白圖形圖像編程方面的要點知識,以及對全書作一個指導性的說明。

第2章主要講解怎樣構築PhotoSprite的基本框架。其中包括搭建PhotoSprite的工作界面,介紹PhotoSprite的基本操作,概述圖像格式的各種優缺點和說明顏色模式的處理原理等基本內容。

第3章主要教您如何打造方便靈活的多功能工具箱。其中包括移動、選取、套索、鉛筆、畫刷、橡皮、直線、矩形、文本、吸管、油漆桶等工具和角度盤、畫布控制項。

第4章為本書核心內容的開端,主要講解圖像色彩和色調調整方面的內容。通過對本章內容的學習,讀者朋友們可以方便、直觀地對圖像的色相、飽和度和灰度等進行調節,增加對圖像處理的學習興趣,促進對圖像核心模組開發的認識和套用。

第5章為數學基礎知識回顧,主要講解如何運用基本的數學知識使圖像處理產生更加迷人的效果。其中包括基本的代數運算、複雜的幾何變換和深奧的邏輯運算等內容。

第6、7章將全書推向高潮,將為大家揭開Photoshop夢幻濾鏡的神秘面紗,教您如何製作出神奇的藝術效果。其中包括模糊、銳化、浮雕、雜點、藝術、扭曲、風格化和其他共8組濾鏡效果,對大家學習圖像處理中的濾鏡效果有很大幫助。

第8章為引伸篇,將為大家講述數字圖像處理在科研中的套用,同時指明其研究方向。主要就圖像分割、形態學、圖像濾波和邊緣檢測共4個部分來進行講解。

5.特殊約定

如果您決定嘗試繼續閱讀本書,那么首先要感謝您的信任。

筆者是一個追求風格的人,善於用簡練、清晰、流暢的語言文字將複雜的技術以簡單的方式表達出來。

為了幫助您閱讀本書的所有代碼,筆者希望您能熟悉一下作品中使用的一些約定。本書程式雖在大多數情況下都遵守C#編碼規範,但有時為了突出代碼的簡潔和美觀,在不引起閱讀障礙和理解歧義的情況下,使用了如下幾個常見的縮略詞。

用bg代表background單詞;用fg代表foreground單詞;用src代表source單詞;用dst代表destination單詞;用tmp代表temporary單詞。

用b表示bitmap型變數;用bmData表示BitmapData型變數。

用BPP表示整型常量4,取Bytes Per Pixel之意,即每像素所含位元組數;用BP2P表示整型常量8,取Bytes Per 2 Pixels之意,即每兩像素所含位元組數。

6.開發環境

閱讀本書至少需要Visual Studio 2005集成開發環境。

PhotoSprite所有源程式都是採用C# 2.0語言編寫的,在Windows 2000 Server SP4 + Visual Studio 2005環境下調試通過。它能正確地運行於Windows XP SP2或Windows Server 2003 SP1等所有安裝了.NET 2.0框架的作業系統。

PhotoSprite不會占用過多的系統資源,所有圖像處理中產生的臨時圖像均保存到磁碟中,通過磁碟與記憶體進行數據交換來實現圖像處理。

同時,為了對比學習圖像處理技術,建議安裝Photoshop 6.0或Fireworks MX及其以上版本的圖像處理軟體。

7.線上資源

圖形圖像是一個複雜而深邃的話題,寥寥數百頁不可能解決所有的問題,加上時間緊張,書中難免會存在一些問題,懇請各位讀者提出批評和指正,同時也希望和大家一起學習和交流。

本書的所有最新訊息(包括原始碼及更新算法)和技術支持均在PhotoSprite發布網站上給出。網站除了維護與本書有直接關聯的內容外,還提供許多您感興趣的.NET文章、代碼、工具和評論。歡迎大家訪問,並提出您的獨到見解。

圖書目錄

第1章 我的PhotoSprite 1

1.1 PhotoSprite預覽 1

1.2 Visual Studio 2005震撼未來 3

1.3 圖像處理精髓 5

第2章 構築PhotoSprite基本框架 9

2.1 設計PS的基本工作界面 9

2.1.1 標題欄 10

2.1.2 選單欄 10

2.1.3 工具列 13

2.1.4 工具箱 14

2.1.5 狀態欄 14

2.1.6 繪圖區 15

2.2 開發PS軟體的基本操作 15

2.2.1 新建圖像檔案 15

2.2.2 打開圖像檔案 16

2.2.3 保存圖像檔案 17

2.2.4 預覽及列印圖像檔案 18

2.2.5 退出軟體 18

2.2.6 圖像導出查看 19

2.2.7 撤銷/重做操作 19

2.2.8 剪下/複製/貼上操作 19

2.2.9 軟體基本設定 20

2.3 圖像格式概述 20

2.3.1 BMP(*.BMP)格式 21

2.3.2 GIF(*.GIF)格式 21

2.3.3 JPEG(*.JPG, *.JPEG)格式 23

2.3.4 PNG(*.PNG)格式 23

2.3.5 TIFF(*.TIF, *.TIFF)格式 25

2.3.6 PhotoSprite專用格式PSF(*.PSF)格式 26

2.4 顏色模式處理 31

2.4.1 點陣圖顏色模式 31

2.4.2 CMYK顏色模式 32

2.4.3 灰度顏色模式 32

2.4.4 HSL顏色模式 33

2.4.5 索引色顏色模式 33

2.4.6 RGB顏色模式 34

2.4.7 顏色拾取器 34

2.5 本章小結 38

第3章 打造多功能的工具箱 39

3.1 開發PS工具之一:移動工具 39

3.2 開發PS工具之二:選取工具 39

3.3 開發PS工具之三:套索工具 42

3.4 開發PS工具之四:鉛筆工具 44

3.5 開發PS工具之五:畫刷工具 47

3.6 開發PS工具之六:橡皮工具 47

3.7 開發PS工具之七:直線工具 48

3.8 開發PS工具之八:矩形工具 50

3.9 開發PS工具之九:文本工具 51

3.10 開發PS工具之十:吸管工具 51

3.11 開發PS工具之十一:油漆桶工具 51

3.12 開發PS工具之十二:角度盤 56

3.13 開發PS工具之十三:繪圖畫布 56

3.14 本章小結 57

第4章 開發PS的核心圖像處理模組 59

4.1 “色彩平衡”圖像處理模組 59

4.2 “亮度”圖像處理模組 62

4.3 “對比度”圖像處理模組 65

4.4 “色調/飽和度”圖像處理模組 68

4.5 “Gamma矯正”圖像處理模組 70

4.6 “灰度”圖像處理模組 74

4.7 “閾值”圖像處理模組 81

4.8 “負像”圖像處理模組 87

4.9 “偽彩色”圖像處理模組 89

4.10 “色彩通道”圖像處理模組 97

4.11 “亮度映射”圖像處理模組 103

4.12 “直方圖”圖像處理模組 106

4.13 “色彩均衡化”圖像處理模組 113

4.14 本章小結 116

第5章 深入圖像處理的數學領域 117

5.1 基本的代數運算 117

5.1.1 加法運算 117

5.1.2 減法運算 120

5.1.3 乘法運算 122

5.1.4 除法運算 124

5.1.5 平均運算 126

5.1.6 求異運算 127

5.1.7 Max/Min運算 129

5.2 圖像處理中的幾何運算 131

5.2.1 圖像平移 131

5.2.2 圖像縮放 136

5.2.3 圖像裁剪 138

5.2.4 圖像旋轉 140

5.2.5 圖像翻轉 143

5.2.6 圖像轉置 146

5.2.7 圖像傾斜 148

5.2.8 圖像修整 152

5.3 圖像處理的邏輯運算 158

5.3.1 邏輯與運算 158

5.3.2 邏輯或運算 160

5.3.3 邏輯非運算 161

5.3.4 邏輯異或運算 162

5.4 本章小結 164

第6章 “殿堂級”PS設計:常用濾鏡開發 165

6.1 濾鏡模組開發之一:模糊濾鏡組 165

6.1.1 模板套用 165

6.1.2 平滑 172

6.1.3 高斯模糊 174

6.1.4 運動模糊 176

6.1.5 徑向模糊 180

6.2 濾鏡模組開發之二:銳化濾鏡組 185

6.2.1 銳化 185

6.2.2 加強銳化 187

6.2.3 自由銳化 189

6.2.4 鈍化蒙版 192

6.3 濾鏡模組開發之三:浮雕濾鏡組 194

6.3.1 調和浮雕 194

6.3.2 八方向浮雕 196

6.3.3 灰度浮雕 201

6.3.4 彩色浮雕 204

6.4 濾鏡模組開發之四:雜點濾鏡組 206

6.4.1 新增雜點 206

6.4.2 雪花雜點 209

第7章 讓我的PS魅力四射:夢幻特效開發 213

7.1 夢幻特效開發之一:藝術濾鏡組 213

7.1.1 民間藝術輕鬆做——剪紙 213

7.1.2 鉛筆速寫好容易——素描 215

7.1.3 追憶童年小人書——連環畫 220

7.1.4 驚悚詭異環境幽——碧綠 223

7.1.5 懷舊相片需珍藏——棕褐 225

7.1.6 色彩渲染顯魅力——染色 228

7.1.7 冰雕雪塑晶瑩透——冰凍 231

7.1.8 趁熱打鐵激情高——熔鑄 233

7.1.9 如夢如幻情意濃——暗調 235

7.1.10 拋磚引玉秀色彩——對調 237

7.1.11 突發奇想生怪念——怪調 239

7.2 夢幻特效開發之二:扭曲濾鏡組 242

7.2.1 蘋果瘦身好可愛——擠壓 242

7.2.2 蜜蜂發福樂哈哈——球面 246

7.2.3 杯中美酒漩起來——漩渦 248

7.2.4 隨波起舞好飄逸——波浪 251

7.2.5 干擾條紋有學問——摩爾紋 254

7.3 夢幻特效開發之三:風格化濾鏡組 257

7.3.1 霧氣騰騰瀰漫開——擴散 257

7.3.2 精彩人生線條化——查找邊緣 260

7.3.3 霓虹燈光迷人眼——照亮邊緣 263

7.3.4 萬眾矚目聚焦點——燈光 266

7.3.5 猶抱琵琶半遮面——馬賽克 269

7.3.6 經典作品要收藏——油畫 273

7.3.7 光線強弱把握好——曝光 278

7.4 夢幻特效開發之四:其他濾鏡組 280

7.4.1 自我設計樂融融——自定義 280

7.4.2 若隱若現朦朧美——圖像融合 283

7.4.3 你躲我藏好神奇——魔術圖 286

7.4.4 眼睛迷人顯魅力——去紅眼 289

7.4.5 圖像文字巧聯繫——藝術字元 291

7.5 本章小結 296

第8章 Photoshop的擴展:在科研中的套用 297

8.1 圖像分割 297

8.1.1 自適應閾值選取 297

8.1.2 二值圖像區域標記 300

8.1.3 面積測量 307

8.1.4 消除小區域 311

8.1.5 輪廓跟蹤 314

8.1.6 周長測量 320

8.1.7 邊緣提取 323

8.1.8 投影量的計算 325

8.2 圖像形態處理學 328

8.2.1 圖像腐蝕 329

8.2.2 圖像膨脹 337

8.2.3 圖像開運算 344

8.2.4 圖像閉運算 345

8.2.5 圖像細化 346

8.2.6 圖像粗化 353

8.3 圖像濾波處理 354

8.3.1 N×N均值濾波 355

8.3.2 自適應平滑濾波 361

8.3.3 N×N中值濾波 366

8.3.4 十字型中值濾波 368

8.3.5 N×N最值濾波 371

8.4 邊緣檢測 373

8.4.1 Roberts運算元 373

8.4.2 Sobel運算元 376

8.4.3 Prewitt運算元 380

8.4.4 Kirsch運算元 382

8.4.5 邊緣增強 385

8.4.6 邊緣均衡化 388

8.4.7 自定義模板檢測 392

8.5 本章小結 396

附錄A C#編碼規範和編程好習慣 397

A.1 命名慣例和規範 397

A.2 縮進和間隔 400

A.3 良好的編程習慣 403

A.4 注釋 406

A.5 異常處理 407

後記 409

參考文獻 410

 

相關詞條

熱門詞條

聯絡我們