內容簡介
《Java數字圖像處理:編程技巧與應用實踐》首先通過一個簡單JAVA圖像處理程序勾勒齣用JAVA來實現圖像處理的基本步驟,介紹JAVA在操作圖像方麵的幾個重要的API類如ImageIO,BufferedImageOP等,並對圖像文件的保存與讀寫做較為深入細緻的講解。從第二章開始介紹圖像的像素操作同時還會用實例講解如何通過這些簡單的像素操作實現圖像的色彩特效。接下來會學習圖像的直方圖,演示如何直方圖均衡化的實際應用,會基於直方圖實現一種圖像搜索算法,接下來學習圖像處理中重要與常見的如何調整圖像的亮度,對比度與飽和度實現圖像的基本調整。然後逐步深入介紹圖像的模糊與銳化,首先學習圖像捲積模糊算法,然後介紹快速模糊算法盒子模糊,細節保留的高斯模糊與雙邊模糊,以及各種不同方嚮的對圖像實現模糊的技術,從而實現不同的處理效果。
目錄
前言
第1章 Java Graphics及其API簡介1
1.1 什麼是Java圖形設備Graphics1
1.1.1 Graphics概述2
1.1.2 Graphics圖形設備的獲取、使用和銷毀2
1.1.3 Java Swing Graphics2D的重要屬性3
1.2 Java 2D API3
1.2.1 基本的Java 2D圖形繪製4
1.2.2 使用Java 2D實現太極圖形繪製5
1.3 用Java Swing繪製自定義的JPanel6
1.4 Swing Java 2D的其他高級特性介紹8
1.5 小結13
第2章 Java BufferedImage對象及其支持的API操作14
2.1 BufferedImage對象的構成14
2.1.1 Raster對象的作用與像素存儲15
2.1.2 圖像類型與ColorModel16
2.1.3 BufferedImage對象的創建與保存17
2.1.4 一個完整的ImageBuffered讀取例子18
2.2 Java BufferedImageOp API20
2.2.1 Java BufferedImageOp 接口介紹20
2.2.2 BufferedImage對象像素的讀寫方法21
2.2.3 常見問題舉例21
2.3 基於BufferedImageOp的圖像濾鏡演示22
2.4 小結28
第3章基本Swing UI組件與圖像顯示29
3.1 JPanel組件與BufferedImage對象的顯示29
3.2 JFrame組件與Main UI實現31
3.3 JFileChoose文件選擇框的使用32
3.4 基本JButton事件響應32
3.5 一個完整的Swing UI Demo33
3.6 小結37
第4章圖像屬性39
4.1 失去的時光與迴憶—老照片特效39
4.2 圖像屬性42
4.3 圖像的亮度、對比度和飽和度45
4.4 圖像飽和度調整46
4.5 圖像亮度調整50
4.6 圖像對比度調整53
4.7 綜閤應用—調整圖像亮度、對比度和飽和度55
4.8 小結61
第5章像素基本操作62
5.1 大自然的色彩—自然係列濾鏡62
5.2 圖像像素加減乘除65
5.3 兩幅圖像的融閤與疊加70
5.4 一個更加深入的應用實踐—圖像上軋花文字效果75
5.5 小結82
第6章像素統計與應用83
6.1 統計圖像的均值、最大值與最小值83
6.2 灰度圖像二值化86
6.3 圖像直方圖91
6.4 基於直方圖實現圖像二值化96
6.5 應用—直方圖均衡化100
6.6 應用—基於直方圖的圖像搜索105
6.7 小結109
第7章圖像編輯110
7.1 為什麼圖像放大以後失真110
7.2 臨近點插值算法117
7.3 雙綫性插值算法120
7.4 雙立方插值與Lanczos采樣124
7.4.1 雙立方插值算法124
7.4.2 Lanczos采樣插值算法131
7.5 圖像鏇轉134
7.6 小結141
第8章圖像捲積143
8.1 模糊也是一種美143
8.2 圖像空間域捲積145
8.3 盒子模糊與高斯模糊149
8.3.1 盒子模糊150
8.3.2 高斯模糊154
8.4 邊緣保留的模糊算法—高斯雙邊模糊157
8.5 像素格特效163
8.6 捲積應用:圖像去噪165
8.7 圖像銳化、拉普拉斯濾波173
8.8 小結176
第9章邊緣檢測與提取177
9.1 什麼是圖像的邊緣177
9.2 Robot算子與軋花效果179
9.3 Sobel算子與Prewitt算子 182
9.4 圖像梯度—大小與角度186
9.5 基於二階導數的圖像邊緣提取189
9.6 經典邊緣提取算法—Canny Edge Detection193
9.7 小結200
第10章二值圖像201
10.1 二值圖像概述與半色調算法201
10.2 圖像抖動算法204
10.3 二值圖像泛洪填充算法208
10.4 連通組件標記算法212
10.5 二值圖像邊緣跟蹤218
10.6 二值圖像細化224
10.7 計算連通區域幾何質心228
10.8 計算連通區域方嚮角度231
10.9 小結233
第11章圖像形態學235
11.1 像素集閤操作235
11.2 腐蝕與膨脹238
11.3 開閉操作241
11.4 Hit-and-Miss變換操作244
11.5 距離變換247
11.6 分水嶺算法250
11.7 灰度圖像腐蝕與膨脹254
11.8 小結257
第12章圖像分割258
12.1 摳圖真的這麼難嗎258
12.2 基於Mean-Shift的圖像分割259
12.3 基於K-Means的圖像分割265
12.4 基於Fuzzy C-Means的圖像分割269
12.5 基於分水嶺的圖像分割275
12.6 小結279
第13章圖像特徵的提取與檢測280
13.1 顔色特徵提取280
13.2 紋理提取283
13.3 直綫檢測288
13.4 圓檢測291
13.5 圖像金字塔295
13.6 Harris角度檢測302
13.7 SIFT特徵提取307
13.8 小結322
第14章綜閤運用:照片轉油畫算法323
14.1 畫筆區域323
14.2 采樣問題325
14.3 筆畫參數327
14.4 筆畫繪製330
14.5 程序實現334
14.6 小結337
附錄 數學知識參考引用338
前言/序言
為什麼要寫這本書我對圖像處理的認識最初來自於讀軟件工程專業時做畢業設計論文的需要,畢業論文做完以後,我便把所有關於圖像處理的知識扔到瞭一邊。2011年的一天有位朋友問瞭我幾個簡單的圖像處理方麵的問題,在解答問題的過程中我發現自己對圖像處理的熱情一直都在燃燒,從那一刻起我決定重新學習圖像處理。這之後,我把以前買的幾本圖像處理的書都讀瞭一遍,同時還堅持通過寫博客來督促自己加深理解,隨著學習的不斷深入,對圖像處理的認知也在不斷加深,我越來越渴望自己能實現那些書中提到的圖像處理手段與方法,於是便開始不斷嘗試,在經過瞭各種“坑”與無助之後,我終於編程實現瞭學習過的每一種圖像處理方法。這個過程十分痛苦,因為我深刻感受到瞭圖像處理在理論與實踐之間的細微差異,而這些細微差異往往會導緻處理結果與理論預期相差很大。
可能提到圖像處理,很多人馬上就會想到相關書籍中各種復雜的數學公式與矩陣計算,然後就會說我數學不好學不瞭這個,早早地就把自己給否定瞭。那些數學公式的確讓人望而生畏,但是隻要仔細探究一番,就會發現它在圖像處理的應用上遠遠沒有看上去那麼復雜,甚至可以說十分簡單,這是本人學習圖像處理時得到的最大一個心得體會,正如一句俗語說的:“世上無難事,隻怕有心人”。
正是因為自己在學習過程中經曆瞭痛苦,所以我想寫一本不一樣的圖像處理入門圖書,內容不再是冰冷的數學公式與文字描述,而是基於理論的實踐步驟和細節詳解,是一個個可以直接運行的代碼實現,書中沒有大量的數學公式,有的隻是數學知識的巧妙運用。我希望通過分享自己學習過程中的體會與編程實踐經驗,幫助更多人在學習圖像處理的道路上少走彎路,早日進入圖像處理的科學殿堂。
在國內,程序員寫書早已經不是什麼新鮮事物,但是我可以肯定地說,本書是國內第一本由奮鬥在編碼一綫的碼農寫的圖像處理入門圖書。它不是當下流行的視覺圖像處理庫的應用介紹,而是圖像處理基礎知識和理論的學習與實踐,正如一句西方科技諺語所說的那樣,“在理論上,理論與實踐是一緻的,在實踐上,它們是不一緻的”。當前關於圖像處理的書大多數都是重理論而輕實踐,但圖像處理在理論與實踐編程之間是存在輕微差異的,而這就成瞭很多初學者無法逾越的鴻溝。本書就是要擬閤理論與實踐之間的鴻溝,幫助讀者架起從理論到實踐的大橋。
作為工作超過十年的程序員寫的第一本書,本書也是我個人職業生涯的一個新起點,它鞭策與勉勵自己不斷努力上進,除瞭對圖像處理的興趣外,這一年多寫書的動力更多的是毅力與幫助後來者的初衷。隻要本書能為國內圖像處理專業知識的普及與應用實踐略盡綿薄之力,那辛苦也就值瞭。
讀者對象本書適閤以下人群閱讀:
從事圖像處理的工作人員學習圖像處理的愛好者希望提升自我的中高級程序員計算機專業高年級本科生或研究生開設圖像處理相關課程的大專院校學生從事Java應用的開發者如何閱讀本書本書分為兩大部分,其中第一部為前三章,主要介紹Java Swing編程的基礎知識。第二部分是本書的核心內容,係統全麵地介紹圖像處理的各種方法與常見應用場景編程實現。如果你已經對Java語言和Java Swing有基本的認識,可以跳過前三章,直接從第4章開始閱讀本書。同時本書注重實踐,所以請務必閱讀給齣的源代碼並運行它,這樣纔能更好地理解所講的知識。
第一部分為基礎篇,簡單地介紹瞭Java Swing圖形與圖像編程基本API使用技巧,以及相關實踐編程,幫助讀者瞭解圖像接口在Java語言中的基礎知識,並熟悉像素的讀寫與操作。
第二部分為實踐與應用編程,從最基礎的像素操作開始,通過實踐編程講解圖像處理過程中各種基本像素運算、混閤、圖像插值、直方圖獲取與圖像搜索、圖像捲積、邊緣提取、二值圖像分析與特徵提取等知識,最後通過剖析一個流行的圖像油畫轉換算法編程實踐來結束本書。
附錄為本書相關數學知識簡單參考。其他參考資料索引可在我的Github上找到。
此外,本書的源文件可到www.hzbook.com上通過搜索本書下載,或者到github上下載。
勘誤和支持由於作者的水平有限,編寫的時間也很倉促,書中難免會齣現一些錯誤或不準確的地方,懇請讀者批評指正。本書配套源代碼已上傳到github上,訪問地址為:https://github.com/gloomyfish/mybook-java-imageprocess,如果有讀者想直接提交勘誤之後的代碼,請先郵件聯係本人,同意以後即可提交,同時本人也會根據讀者反饋修改更新源代碼。如果你有更多的寶貴意見,也歡迎發送郵件至我的郵箱bfnh1998@hotmail.com,我很期待能夠聽到你們的真摯反饋。
緻謝首先要感謝圖像處理學科那些偉大的先行者,是他們創立瞭這個影響力巨大的學科。其次要感謝CSDN博客頻道,在CSDN我結識瞭很多良師益友,他們直言不諱地指齣瞭我博客文章中的很多不妥之處與需要改進的地方,特彆是Trent、jichen324、qiwenmingshiwo、FDHGVH2461、cr459464757、wust小吳、xiaowei_cqu,以及這個倉促寫就的名單之外的更多朋友,感謝你們的寶貴建議。
感謝機械工業齣版社華章公司的編輯楊綉國老師,你的一封電子約稿郵件促成瞭本書,也幫助我實現瞭寫一本注重實踐的圖像處理入門圖書的夢想;感謝你的耐心,在這一年多時間裏你不厭其煩地迴答我在寫作過程中一個又一個問題;感謝你的魄力和遠見,始終支持我的寫作,你的鼓勵和幫助引導我順利完成全部書稿。
最後一定要感謝我的父母,感謝你們將我培養成人;感謝我的妻子在我寫書的這一年多時間讓我從傢務中解脫,給我支持與鼓勵。
謹以此書,獻給我最親愛的兩個孩子,以及眾多熱愛圖像處理的朋友們。
賈誌剛中國,蘇州,2015年9月
Java數字圖像處理:編程技巧與應用實踐 下載 mobi epub pdf txt 電子書