Octave AR應用實戰

於紅博

  • 出版商: 清華大學
  • 出版日期: 2024-02-01
  • 售價: $894
  • 貴賓價: 9.5$849
  • 語言: 簡體中文
  • ISBN: 7302652635
  • ISBN-13: 9787302652632
  • 立即出貨

  • Octave AR應用實戰-preview-1
  • Octave AR應用實戰-preview-2
  • Octave AR應用實戰-preview-3
Octave AR應用實戰-preview-1

商品描述

Octave為GNU項目下的開源軟件,旨在解決線性和非線性的數值計算問題。本書全面講解AR技術在理論上的基礎和在行業內的應用,幫助讀者盡快掌握Octave的應用技巧。 本書共13章,涵蓋廣泛的AR技術應用場景,將龐大的AR技術分解為可視化技術、電腦視覺、硬件選型、SLAM算法等方面,分類進行詳細講解,並提供大量實用程序示例,讓讀者不僅可以在學習過程中減小阻礙,在實際的工程研究中也方便查找,內容覆蓋全面。 本書針對零基礎的讀者,有VR方向研發經驗的程序設計人員也可以學到很多Octave獨有的特性。

目錄大綱

目錄

第1章緒論1

第2章模型與背景畫面52.1定義二維模型5

2.1.1matgeom5

2.1.2矩形6

2.1.3圓形7

2.1.4圓弧7

2.1.5橢圓9

2.1.6橢圓弧9

2.2定義三維模型11

2.2.1膠囊體11

2.2.2立體圓形11

2.2.3立體圓弧12

2.2.4圓柱體12

2.2.5球體14

2.2.6立體橢圓14

2.2.7橢球體15

2.2.8圓環面15

2.2.9圓頂面17

2.2.10正方體17

2.2.11長方體17

2.3盒子模型19

2.4製作復雜的模型20

2.4.1製作二維機器人模型20

2.4.2製作三維機器人模型27

2.5以圖片格式保存模型35

2.6FFmpeg36

2.6.1安裝FFmpeg37

2.6.2FFmpeg支持的命令37

2.7播放真實的背景畫面37

2.7.1ffplay命令的主要選項38

2.7.2ffplay命令的鍵盤操作選項40

2.7.3ffmpeg命令的用例41

2.8模型圖片背景透明化42

2.8.1SVG格式42

2.8.2SVG格式的不透明度屬性42

2.8.3SVG格式的點屬性43

2.8.4SVG格式的svg片段元素43

2.8.5SVG格式的多邊形元素43

2.8.6SVG格式的組合對象元素43

2.8.7Octave保存的SVG圖片的結構44

2.8.8通過Octave修改SVG圖片背景的透明度45

2.8.9GIF格式46

2.8.10GIF格式的背景透明效果46

2.9ImageMagick47

2.9.1安裝ImageMagick47

2.9.2安裝magick47

2.9.3ImageMagick的用例47

2.9.4製作透明背景的GIF圖片48

2.10讀取或寫入圖像48

2.10.1讀取圖像48

2.10.2寫入圖像49

2.10.3設置或返回讀取圖像的路徑50

2.10.4返回圖像信息50

2.10.5管理支持的圖像格式51

2.10.6Octave默認支持處理的圖像格式53

2.11顯示圖像54

2.11.1以基礎方式顯示圖像54

2.11.2將圖像矩陣顯示為圖像54

2.11.3以縮放模式顯示圖像54

2.12轉換圖像類型55

2.12.1將圖像轉換為double格式55

2.12.2將灰度圖像或黑白圖像轉換為索引圖像55

2.12.3將索引圖像轉換為灰度圖像或黑白圖像56

2.12.4將RGB圖像轉換為索引圖像56

2.12.5將索引圖像轉換為RGB圖像56

2.13將模型放置於真實的背景畫面上56

2.13.1預覽AR畫面57

2.13.2背景畫面為視頻時的處理方法57

2.13.3加快視頻的處理速度57

2.14放置模型應用58

2.14.1放置模型應用原型設計58

2.14.2放置模型應用視圖代碼設計58

2.14.3放置模型應用屬性代碼設計62

2.14.4放置模型應用回調函數代碼設計69

2.14.5選擇圖像文件74

2.14.6將視頻解壓為圖片78

2.14.7生成輸出文件名或文件夾79

2.14.8初始化軸對象81

2.14.9設置軸對象的寬高比82

2.14.10生成預覽圖片或視頻83

2.14.11更新AR畫面的預覽效果90

2.14.12實際採用的視頻預處理方式和處理方式92

2.15日誌功能94

2.15.1日誌的原理94

2.15.2日誌級別94

2.15.3日誌格式95

2.15.4日誌持久化96

2.15.5實例化日誌對象96

2.15.6日誌類97

2.15.7在放置模型應用中使用日誌類101

第3章位姿103

3.1位姿在不同坐標系下的數學表述103

3.1.1球面角103

3.1.2球面坐標103

3.1.3歐拉角103

3.1.4RPY角104

3.2計算幾何相關知識104

3.2.1兩點求角度104

3.2.2三點求角度104

3.3力學相關知識104

3.3.1質點104

3.3.2質點系104

3.3.3質心104

3.3.4質心運動定理105

3.3.5剛體105

3.4旋轉矩陣105

3.4.1旋轉矩陣的用法105

3.4.2歐拉角與旋轉矩陣的變換106

3.4.3根據旋轉角度創建旋轉矩陣107

3.4.4根據旋轉矩陣計算轉軸或旋轉角度107

3.5仿射變換108

3.5.1平移變換108

3.5.2縮放變換108

3.5.3剪切變換108

3.5.4旋轉變換109

3.5.5仿射變換矩陣的尺寸描述109

3.6Octave的空間變換函數110

3.6.1安裝image工具箱110

3.6.2實例化仿射變換對象110

3.6.3根據仿射變換對象進行仿射變換112

3.6.4根據仿射變換對象進行仿射變換的逆變換112

3.6.5推斷仿射變換矩陣112

3.6.6裁剪圖像函數114

3.6.7縮放圖像函數114

3.6.8旋轉圖像函數115

3.6.9快速旋轉和縮放圖像函數116

3.6.10透視變換函數116

3.6.11高斯金字塔函數117

3.6.12重新映射圖像函數117

3.6.13剪切變換函數118

3.6.14平移變換函數119

3.7ImageMagick的空間變換命令119

3.7.1resize參數119

3.7.2geometry參數121

3.7.3thumbnail參數121

3.7.4sample參數122

3.7.5scale參數122

3.7.6filter參數122

3.7.7magnify參數123

3.7.8adaptiveresize參數123

3.7.9interpolate參數123

3.7.10interpolativeresize參數123

3.7.11distort參數123

3.7.12+distort參數131

3.8通過GUI控制模型的位姿132

3.8.1控制模型的位姿應用原型設計132

3.8.2控制模型的位姿應用視圖代碼設計133

3.8.3控制模型的位姿應用回調函數代碼設計139

3.8.4位姿的默認值142

第4章投影144

4.1平行投影和透視投影144

4.2建立模型的邊界盒145

4.2.1判斷邊界145

4.2.2hggroup146

4.2.3圖形對象定位148

4.2.4根據邊界點的位置繪制邊界盒150

4.2.5自動確定模型的邊界150

4.2.6在模型類中添加繪制邊界盒功能157

4.3將二維模型投影為三維模型160

4.4Octave的相機概念164

4.4.1相機位置165

4.4.2相機目標165

4.4.3相機視角165

4.4.4軸對象的方向166

4.5更改三維模型的投影效果167

4.5.1視點變換167

4.5.2觀察點變換167

4.6通過GUI控制模型的投影效果167

4.6.1控制投影效果應用原型設計168

4.6.2控制投影效果應用視圖代碼設計168

4.6.3更新模型文件的預覽效果172

4.6.4顯示當前的選項值174

4.6.5修改當前的選項值176

4.6.6保存模型文件的預覽效果179

第5章畸變182

5.1圖像畸變182

5.1.1徑向畸變182

5.1.2桶形畸變和枕形畸變182

5.1.3切向畸變183

5.2Hugin183

5.2.1安裝Hugin183

5.2.2Hugin鏡頭校準的默認狀態184

5.2.3Hugin鏡頭校準的鏡頭類型184

5.2.4Hugin鏡頭校準的圖片要求185

5.2.5Hugin鏡頭校準的必選參數185

5.2.6Hugin鏡頭校準的可選參數185

5.2.7Hugin鏡頭校準的常見錯誤185

5.2.8Hugin鏡頭校準的預覽功能185

5.2.9Hugin保存鏡頭186

5.3kalibr188

5.3.1kalibr在Docker之下安裝並校準相機188

5.3.2kalibr源碼安裝並校準相機189

5.3.3kalibr以ROS包的格式收集數據190

5.3.4kalibr校準多個相機190

5.3.5kalibr校準帶IMU的相機191

5.3.6kalibr校準多個IMU193

5.3.7kalibr校準滾動快門相機194

5.3.8kalibr對優化校準結果的改進建議194

5.3.9kalibr使用數據集校準194

5.3.10kalibr支持的相機模型194

5.3.11kalibr支持的畸變模型195

5.3.12kalibr支持的校準目標195

5.3.13kalibr設置相機焦點196

5.3.14kalibr校準驗證器197

5.3.15kalibr配合ROS 2使用197

5.4畸變的校準197

5.4.1用現成的參數校準畸變197

5.4.2用Hugin校準畸變198

5.5畸變的矯正200

5.5.1用校準參數矯正畸變200

5.5.2用坐標映射矯正畸變202

5.6通過GUI控制矯正效果205

5.6.1控制矯正效果應用原型設計205

5.6.2控制矯正效果應用視圖代碼設計206

5.6.3控制矯正效果應用回調函數代碼設計211

5.6.4校準參數的默認值214

第6章電腦視覺216

6.1Canny邊緣檢測216

6.2Hough直線檢測217

6.3自適應局部圖像閾值處理218

6.4SIFT算法218

6.4.1高斯金字塔218

6.4.2高斯尺度空間219

6.4.3DoG空間219

6.4.4SIFT特徵點定位220

6.4.5SIFT特徵點方向220

6.4.6SIFT特徵匹配221

6.5SURF算法221

6.5.1SURF算法和SIFT算法的區別221

6.5.2積分圖像222

6.5.3構造Hessian矩陣222

6.5.4用盒子濾波器代替高斯濾波器223

6.5.5SURF特徵點定位223

6.5.6SURF特徵點方向分配223

6.5.7SURF特徵匹配224

6.6生成圖像處理時需要的特殊矩陣224

6.6.1生成均值濾波器224

6.6.2生成圓形區域均值濾波器225

6.6.3生成高斯濾波器226

6.6.4生成高斯拉普拉斯算子227

6.6.5生成拉普拉斯算子228

6.6.6生成銳化算子228

6.6.7生成運動模糊算子229

6.6.8生成Sobel算子229

6.6.9生成Prewitt算子230

6.6.10生成Kirsch算子230

6.7ImageMagick的電腦視覺變換命令230

6.7.1edge參數230

6.7.2canny參數231

6.7.3houghlines參數231

6.7.4lat參數231

6.8文件擴展名為oct的程序231

6.8.1編譯oct程序232

6.8.2編譯oct程序時支持的可選參數232

6.8.3編譯oct程序時支持的環境變量234

6.9PCL庫235

6.9.1安裝PCL庫235

6.9.2PCL庫的點的類型236

6.9.3在Octave中使用PCL庫238

6.10點雲模型239

6.10.1點雲模型的概念239

6.10.2點雲模型的存儲格式239

6.10.3讀取PCD模型240

6.10.4寫入PCD模型241

6.10.5PCD模型可視化242

6.10.6OpenNI點雲捕捉247

6.10.7點雲分割248

6.11通過GUI控制電腦視覺變換效果252

6.11.1控制電腦視覺變換效果應用原型設計252

6.11.2控制電腦視覺變換效果應用視圖代碼設計256

6.11.3控制電腦視覺變換效果應用回調函數代碼設計262

6.11.4電腦視覺變換參數的默認值266

6.11.5顯示當前修改的參數267

6.11.6電腦視覺變換的關聯關系269

6.11.7電腦視覺變換的流程272

6.12OctoMap279

6.12.1OctoMap源碼安裝280

6.12.2OctoMap通過vcpkg安裝280

6.12.3octomap ROS包的用法281

6.12.4octomap_rviz_plugins281

6.13Caffe281

6.13.1Caffe源碼安裝281

6.13.2Caffe使用Docker安裝283

6.13.3Caffe訓練MNIST模型283

6.13.4Caffe訓練ImageNet模型287

6.14SOLD2288

6.14.1SOLD2源碼安裝288

6.14.2SOLD2使用pip安裝288

6.14.3SOLD2訓練模型288

6.14.4SOLD2使用模型289

6.15YOLOv5290

6.15.1YOLOv5源碼安裝290

6.15.2YOLOv5推斷290

6.15.3YOLOv5使用detect.py推斷291

6.15.4在其他應用中使用YOLOv5291

6.15.5YOLOv5數據集訓練292

6.16YOLOv8292

6.16.1YOLOv8源碼安裝292

6.16.2YOLOv8的模式293

6.16.3YOLOv8的CLI模式293

6.16.4YOLOv8的Python模式298

6.16.5YOLOv8的三大組件300

6.17Fast RCNN303

6.17.1Fast RCNN源碼安裝304

6.17.2Fast RCNN運行用例304

第7章硬件選型與AR算法306

7.1相機選型306

7.1.1單目相機和雙目相機306

7.1.2景深相機307

7.1.3全景相機307

7.1.4柱面全景相機308

7.1.5網絡攝像頭308

7.2鏡頭選型308

7.2.1變焦鏡頭和定焦鏡頭308

7.2.2正圓鏡頭和橢圓鏡頭309

7.2.3不同焦段的鏡頭309

7.2.4不同視角的鏡頭309

7.2.5標準鏡頭309

7.2.6廣角鏡頭309

7.2.7長焦鏡頭310

7.2.8魚眼鏡頭310

7.2.9微距鏡頭310

7.2.10移軸鏡頭310

7.2.11折返鏡頭310

7.3IMU選型311

7.3.13軸IMU311

7.3.26軸IMU311

7.3.39軸IMU312

7.3.4不同精度的IMU312

7.3.5不同封裝的IMU312

7.4激光雷達選型312

7.4.1不同線數的激光雷達313

7.4.2不同記錄光能方式的激光雷達313

7.4.3不同工作條件的激光雷達313

7.5聲吶選型313

7.5.1不同頻率的聲吶313

7.5.2不同記錄聲波方式的聲吶314

7.5.3不同掃描方式的聲吶314

7.5.4數字成像聲吶315

7.5.5數字剖面聲吶315

7.6機器人選型315

7.6.1常用的機器人315

7.6.2不同連接方式的機器人315

7.6.3不同移動性的機器人316

7.6.4不同控制方式的機器人316

7.6.5不同幾何結構的機器人316

7.6.6不同智能程度的機器人316

7.6.7不同用途的機器人316

7.7AR算法中的景深317

7.8點雲處理算法317

7.8.1點雲反射317

7.8.2點雲降噪317

7.8.3點雲分類318

7.8.4體素濾波器318

7.9里程計算法319

7.9.1不同傳感器的里程計319

7.9.2不同參考圖像或參考點的里程計320

7.9.3里程計的傳感器融合320

7.10建圖算法320

7.10.1狀態估計320

7.10.2回環檢測321

7.10.3在線建圖321

7.10.4離線建圖322

7.11路徑規劃算法322

7.11.1A算法322

7.11.2Dijkstra算法322

7.11.3RRT算法322

7.11.4D算法322

第8章傾斜攝影323

8.1傾斜攝影技術的特點323

8.2傾斜攝影的圖像特點324

8.3傾斜攝影方式325

8.4傾斜攝影的遮擋關系325

8.5傾斜攝影的相機326

8.6傾斜攝影的相機選型329

第9章SLAM算法入門331

9.1SLAM算法的流程331

9.2instrumentcontrol332

9.2.1常用函數332

9.2.2通用函數335

9.2.3GPIB335

9.2.4I2C339

9.2.5MODBUS341

9.2.6並口344

9.2.7串口346

9.2.8新版串口352

9.2.9SPI357

9.2.10TCP360

9.2.11TCP客戶端363

9.2.12TCP服務器端365

9.2.13UDP367

9.2.14UDP埠371

9.2.15USBTMC375

9.2.16VXI11377

9.3SLAM算法的分類379

9.3.1不同硬件的SLAM算法379

9.3.2二維SLAM和三維SLAM380

9.3.3緊耦合SLAM和松耦合SLAM380

9.3.4室內SLAM和室外SLAM381

9.3.5不同微調方式的SLAM381

9.4SLAM算法實戰381

第10章SLAM算法的常用庫393

10.1Protobuf393

10.1.1Protobuf源碼安裝393

10.1.2Protobuf通過DNF軟件源安裝394

10.1.3Protobuf用法394

10.2g2o396

10.2.1g2o源碼安裝397

10.2.2g2o的文件格式398

10.2.3g2o的基本用法398

10.2.4g2o運行用例400

10.2.5g2o的擬合命令404

10.2.6g2o的輸出命令409

10.2.7g2o的轉換命令411

10.2.8g2o製造數據411

10.2.9g2o的模擬器命令416

10.2.10g2o的優化命令418

10.2.11g2o的校準命令421

10.2.12g2o的GUI命令422

10.3g2opy427

10.3.1g2opy源碼安裝427

10.3.2g2opy用法428

10.4ROS428

10.4.1ROS 1源碼安裝428

10.4.2ROS 2源碼安裝429

10.4.3使用Docker安裝ROS 1430

10.4.4使用Docker安裝ROS 2430

10.4.5離線訪問rosdistro431

10.4.6ROS包初始化環境變量432

10.4.7ROS 1版本更新432

10.4.8ROS 2版本更新433

10.4.9ROS的發行版434

10.5rviz434

10.5.1rviz初始化環境變量434

10.5.2rviz主界面操作435

10.5.3rviz支持的界面類型435

10.5.4rviz的配置文件436

10.5.5rviz在預覽時支持的鼠標操作437

10.5.6rviz的鍵盤操作選項438

10.5.7rviz管理插件438

10.6GLClib438

10.6.1GLClib源碼安裝439

10.6.2GLClib運行用例439

10.7GLCPlayer 440

10.7.1GLCPlayer源碼安裝440

10.7.2安裝GLCPlayer的Windows安裝包441

10.7.3GLCPlayer的主界面441

10.7.4GLCPlayer的用法445

10.8Pangolin451

10.8.1Pangolin支持的主要特性451

10.8.2Pangolin源碼安裝451

10.9TEASER++452

10.9.1TEASER++源碼安裝452

10.9.2TEASER++運行用例454

10.10Ceres解算器454

10.10.1Ceres解算器源碼安裝454

10.10.2Ceres解算器通過DNF軟件源安裝456

10.10.3Ceres解算器通過vcpkg安裝456

10.10.4Ceres解算器使用BAL數據集456

10.11Kindr456

10.11.1Kindr源碼安裝456

10.11.2Kindr使用catkin安裝457

10.11.3Kindr二次開發457

10.11.4Kindr編譯文檔458

10.12Sophus458

10.12.1Sophus源碼安裝458

10.12.2Sophus安裝Python的包應用458

10.12.3Sophus的C++常用函數和方法459

10.12.4Sophus的Python常用函數和方法459

第11章開源的SLAM算法實現462

11.1OKVIS462

11.1.1OKVIS源碼安裝462

11.1.2OKVIS運行用例464

11.1.3OKVIS的輸出數據464

11.1.4OKVIS的配置文件464

11.1.5OKVIS對校準相機的要求466

11.1.6OKVIS二次開發466

11.2VINSMono467

11.2.1VINSMono源碼安裝467

11.2.2VINSMono使用視覺慣性里程計和姿態圖數據集467

11.2.3VINSMono建圖合並468

11.2.4VINSMono建圖輸入/輸出468

11.2.5VINSMono AR演示468

11.2.6VINSMono使用相機468

11.2.7VINSMono在不同相機上的表現469

11.2.8VINSMono在Docker之下安裝469

11.3ROVIO469

11.3.1ROVIO源碼安裝470

11.3.2ROVIO相機內參470

11.3.3ROVIO的配置文件471

11.3.4ROVIO通過校準方式獲取相機內參471

11.4MSCKF_VIO471

11.4.1MSCKF_VIO源碼安裝471

11.4.2MSCKF_VIO校準472

11.4.3MSCKF_VIO使用數據集472

11.4.4MSCKF_VIO的ROS節點473

11.5ORBSLAM473

11.5.1ORBSLAM源碼安裝474

11.5.2ORBSLAM的用法475

11.5.3ORBSLAM的設置文件475

11.5.4ORBSLAM結果失敗的總結475

11.6ORBSLAM2476

11.6.1ORBSLAM2源碼安裝476

11.6.2ORBSLAM2的單目相機用例477

11.6.3ORBSLAM2的雙目相機用例477

11.6.4ORBSLAM2的景深相機用例478

11.6.5ORBSLAM2編譯ROS包478

11.6.6ORBSLAM2的ROS包的用法478

11.6.7ORBSLAM2的模式479

11.7ORBSLAM3479

11.7.1ORBSLAM3源碼安裝479

11.7.2ORBSLAM3配置相機480

11.7.3ORBSLAM3執行用例480

11.7.4ORBSLAM3編譯ROS包480

11.7.5ORBSLAM3的ROS包的用法480

11.7.6ORBSLAM3分析運行時間481

11.7.7ORBSLAM3相機校準481

11.8Cube SLAM481

11.8.1Cube SLAM的模式481

11.8.2Cube SLAM源碼安裝482

11.8.3Cube SLAM的ROS包的用法482

11.8.4Cube SLAM的註意事項483

11.9DSSLAM483

11.9.1DSSLAM源碼安裝483

11.9.2DSSLAM使用TUM數據集484

11.9.3DSSLAM的目錄結構484

11.10DynaSLAM484

11.10.1DynaSLAM源碼安裝485

11.10.2DynaSLAM使用景深相機和TUM數據集485

11.10.3DynaSLAM使用雙目相機和KITTI數據集486

11.10.4DynaSLAM使用單目相機和TUM數據集486

11.10.5DynaSLAM使用單目相機和KITTI數據集486

11.11DXSLAM486

11.11.1DXSLAM源碼安裝486

11.11.2DXSLAM使用TUM數據集487

11.11.3DXSLAM配置相機487

11.11.4DXSLAM的模式488

11.12LSDSLAM488

11.12.1LSDSLAM源碼安裝488

11.12.2LSDSLAM的ROS包489

11.12.3LSDSLAM使用相機489

11.12.4LSDSLAM使用數據集489

11.12.5LSDSLAM的校準文件489

11.12.6LSDSLAM的鍵盤操作選項490

11.12.7LSDSLAM動態調節參數490

11.12.8LSDSLAM對優化結果的改進建議491

11.12.9LSDSLAM查看器492

11.12.10LSDSLAM查看器的鍵盤操作選項492

11.12.11LSDSLAM查看器動態調節參數493

11.13GTSAM494

11.13.1GTSAM源碼安裝494

11.13.2GTSAM的用法496

11.13.3GTSAM的包應用496

11.13.4GTSAM的包應用運行用例497

11.13.5GTSAM對提升性能的改進建議498

11.14Limo498

11.14.1Limo源碼安裝499

11.14.2Limo在Docker之下安裝499

11.14.3Limo在Docker之下安裝語義分割功能500

11.14.4Limo的核心庫500

11.14.5Limo使用數據集500

11.15LeGOLOAM501

11.15.1LeGOLOAM源碼安裝501

11.15.2LeGOLOAM的外部變量502

11.15.3LeGOLOAM使用ROS包502

11.16SCLeGOLOAM503

11.16.1SCLeGOLOAM源碼安裝503

11.16.2SCLeGOLOAM使用ROS包503

11.17MULLS503

11.17.1MULLS源碼安裝504

11.17.2MULLS運行用例505

11.17.3MULLS使用數據集506

11.17.4MULLS的鍵盤操作選項506

11.17.5MULLS的SLAM參數508

11.17.6MULLS保存結果的首選項511

第12章貼圖512

12.1補丁對象512

12.1.1由單個多邊形構成的補丁對象512

12.1.2由多個多邊形構成的補丁對象513

12.1.3使用多個補丁對象繪圖513

12.2面對象514

12.2.1由單個面構成的面對象514

12.2.2由多個面構成的面對象515

12.2.3使用多個面對象繪圖516

12.3顏色圖517

12.3.1Octave的內置顏色圖517

12.3.2查看顏色圖518

12.3.3查看色譜519

12.3.4顏色調節520

12.3.5顏色設計521

12.4顏色圖插值523

12.4.1interp1()函數523

12.4.2interp1()函數支持的插值方式523

12.4.3其他的一維插值函數524

12.5顏色圖重採樣525

12.5.1顏色圖向下採樣525

12.5.2顏色圖向上採樣526

12.6顏色條526

12.6.1顯示顏色條526

12.6.2指定顏色條的繪制位置526

12.6.3刪除顏色條527

12.7按坐標上色528

12.7.1fill3()函數528

12.7.2fill3()函數支持的其他參數529

12.7.3按坐標上色和其他對象的關系529

12.8使用顏色圖上色529

12.9網格和網格面529

12.9.1創建網格530

12.9.2繪制網格面534

12.9.3特殊的網格面536

12.9.4網格面和其他對象的關系536

12.10光照效果536

12.10.1構造光源對象536

12.10.2光源對象的數量限制537

12.10.3光源對象對其他對象的影響538

12.10.4光照效果對比538

12.10.5構造相機光源對象542

12.10.6內置的相機光源方向542

12.10.7精確的相機光源方向543

12.10.8指定相機光源的風格543

12.11材質543

12.11.1材質的尺度544

12.11.2Octave的內置材質544

12.11.3修改材質544

12.11.4材質設計545

12.12貼圖實戰案例545

第13章推流和拉流551

13.1推流時使用的網絡協議551

13.1.1HTTP551

13.1.2RTMP551

13.1.3RTSP552

13.1.4RTP552

13.1.5TCP553

13.1.6UDP553

13.2Nginx553

13.2.1帶插件編譯並安裝Nginx554

13.2.2啟動和停止Nginx555

13.2.3安裝HLS庫555

13.2.4Nginx的RTMP配置556

13.3rtspsimpleserver556

13.3.1安裝rtspsimpleserver556

13.3.2rtspsimpleserver的用法557

13.4使用FFmpeg推流558

13.4.1FFmpeg推流媒體文件558

13.4.2FFmpeg轉流558

13.4.3FFmpeg支持的網絡協議559

13.4.4FFmpeg指定編譯選項559

13.4.5FFmpeg編譯第三方庫559

13.5libx264編碼器561

13.6推流的分類561

13.6.1點對點推流561

13.6.2廣播式推流562

13.7常用的拉流客戶端562

13.7.1VLC562

13.7.2mplayer562

13.7.3mpv563

13.8推流工具類563

13.8.1推流工具類的構造方法563

13.8.2拼接推流命令565

13.8.3獲取推流命令569

13.8.4發送推流命令569

13.9推流CLI應用571

13.10推流GUI應用573

13.10.1推流應用原型設計573

13.10.2推流應用視圖代碼設計574

13.10.3啟動推流或停止推流577

13.10.4推流應用和推流工具類的配合邏輯581

13.10.5推流應用的優化邏輯583

13.11拉流應用585

13.11.1拉流應用原型設計585

13.11.2拉流應用視圖代碼設計586

13.11.3拉流應用回調函數代碼設計589

13.12一體化部署592

13.12.1部署方案592

13.12.2rtspsimpleserver的埠配置592

13.12.3視頻流屬性代碼設計593

13.12.4客戶端提示字符串設計598

13.12.5推流應用和拉流應用共同運行599