├── .github └── workflows │ └── Documentation.yaml ├── .gitignore ├── Artifacts.toml ├── LICENSE ├── Project.toml ├── README.md ├── docs ├── Manifest.toml ├── Project.toml ├── dip │ ├── ch2 │ │ ├── config.json │ │ └── example_2.2.jl │ └── index.md ├── make.jl ├── src │ ├── index.md │ └── reference.md └── tutorials │ └── index.md └── src ├── DIP3e.jl └── DIPTutorials.jl /.github/workflows/Documentation.yaml: -------------------------------------------------------------------------------- 1 | name: Documentation 2 | 3 | on: 4 | pull_request: 5 | push: 6 | branches: 7 | - 'master' 8 | tags: '*' 9 | 10 | jobs: 11 | build: 12 | runs-on: ${{ matrix.os }} 13 | strategy: 14 | matrix: 15 | julia-version: ["1"] 16 | julia-arch: [x86] 17 | os: [ubuntu-latest] 18 | steps: 19 | - uses: actions/checkout@v1.0.0 20 | - uses: julia-actions/setup-julia@latest 21 | with: 22 | version: ${{ matrix.julia-version }} 23 | - name: Install dependencies 24 | run: julia --project=docs/ -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate()' 25 | - name: Build and deploy 26 | env: 27 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 28 | DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }} # https://github.com/JuliaDocs/Documenter.jl/issues/1177 29 | run: julia --project=docs/ docs/make.jl 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /Manifest.toml 3 | /assets 4 | /docs/build 5 | /docs/src/democards 6 | -------------------------------------------------------------------------------- /Artifacts.toml: -------------------------------------------------------------------------------- 1 | [DIP3E_CH01] 2 | git-tree-sha1 = "18b81545e580af0699745f91393977e1617315bc" 3 | lazy = true 4 | 5 | [DIP3E_CH02] 6 | git-tree-sha1 = "d928d410e178f7ee19bf400894dd5e597a3b5f66" 7 | lazy = true 8 | 9 | [DIP3E_CH03] 10 | git-tree-sha1 = "9d4fbeea41b07048e6450ab206ecb967650974a0" 11 | lazy = true 12 | 13 | [DIP3E_CH04] 14 | git-tree-sha1 = "2e60464db6f3ae092ea73b76c6b223f16ed69a06" 15 | lazy = true 16 | 17 | [DIP3E_CH05] 18 | git-tree-sha1 = "722b6ca2bf55cfb6276de943b799878d7bdaf86d" 19 | lazy = true 20 | 21 | [DIP3E_CH06] 22 | git-tree-sha1 = "f8c83986d323f543038238abd09353f6692c35af" 23 | lazy = true 24 | 25 | [DIP3E_CH07] 26 | git-tree-sha1 = "461c072d42fcf59e94b98fb363838c865be3637a" 27 | lazy = true 28 | 29 | [DIP3E_CH08] 30 | git-tree-sha1 = "282fade75f1848efe5f8c75b486fdf951b8b5ba6" 31 | lazy = true 32 | 33 | [DIP3E_CH09] 34 | git-tree-sha1 = "3bc0758e9d4074bcc62874782b1a8d7afa7fbcf3" 35 | lazy = true 36 | 37 | [DIP3E_CH10] 38 | git-tree-sha1 = "108e47857396594f85ccfb6ff20c93080e633733" 39 | lazy = true 40 | 41 | [DIP3E_CH11] 42 | git-tree-sha1 = "e257d79e109cc2023ef76f2640e3f1dbab350a2c" 43 | lazy = true 44 | 45 | [DIP3E_CH12] 46 | git-tree-sha1 = "7fde972f9451d2590196cfeb21bf07669613fec5" 47 | lazy = true 48 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Attribution 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More_considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution 4.0 International Public License 58 | 59 | By exercising the Licensed Rights (defined below), You accept and agree 60 | to be bound by the terms and conditions of this Creative Commons 61 | Attribution 4.0 International Public License ("Public License"). To the 62 | extent this Public License may be interpreted as a contract, You are 63 | granted the Licensed Rights in consideration of Your acceptance of 64 | these terms and conditions, and the Licensor grants You such rights in 65 | consideration of benefits the Licensor receives from making the 66 | Licensed Material available under these terms and conditions. 67 | 68 | 69 | Section 1 -- Definitions. 70 | 71 | a. Adapted Material means material subject to Copyright and Similar 72 | Rights that is derived from or based upon the Licensed Material 73 | and in which the Licensed Material is translated, altered, 74 | arranged, transformed, or otherwise modified in a manner requiring 75 | permission under the Copyright and Similar Rights held by the 76 | Licensor. For purposes of this Public License, where the Licensed 77 | Material is a musical work, performance, or sound recording, 78 | Adapted Material is always produced where the Licensed Material is 79 | synched in timed relation with a moving image. 80 | 81 | b. Adapter's License means the license You apply to Your Copyright 82 | and Similar Rights in Your contributions to Adapted Material in 83 | accordance with the terms and conditions of this Public License. 84 | 85 | c. Copyright and Similar Rights means copyright and/or similar rights 86 | closely related to copyright including, without limitation, 87 | performance, broadcast, sound recording, and Sui Generis Database 88 | Rights, without regard to how the rights are labeled or 89 | categorized. For purposes of this Public License, the rights 90 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 91 | Rights. 92 | 93 | d. Effective Technological Measures means those measures that, in the 94 | absence of proper authority, may not be circumvented under laws 95 | fulfilling obligations under Article 11 of the WIPO Copyright 96 | Treaty adopted on December 20, 1996, and/or similar international 97 | agreements. 98 | 99 | e. Exceptions and Limitations means fair use, fair dealing, and/or 100 | any other exception or limitation to Copyright and Similar Rights 101 | that applies to Your use of the Licensed Material. 102 | 103 | f. Licensed Material means the artistic or literary work, database, 104 | or other material to which the Licensor applied this Public 105 | License. 106 | 107 | g. Licensed Rights means the rights granted to You subject to the 108 | terms and conditions of this Public License, which are limited to 109 | all Copyright and Similar Rights that apply to Your use of the 110 | Licensed Material and that the Licensor has authority to license. 111 | 112 | h. Licensor means the individual(s) or entity(ies) granting rights 113 | under this Public License. 114 | 115 | i. Share means to provide material to the public by any means or 116 | process that requires permission under the Licensed Rights, such 117 | as reproduction, public display, public performance, distribution, 118 | dissemination, communication, or importation, and to make material 119 | available to the public including in ways that members of the 120 | public may access the material from a place and at a time 121 | individually chosen by them. 122 | 123 | j. Sui Generis Database Rights means rights other than copyright 124 | resulting from Directive 96/9/EC of the European Parliament and of 125 | the Council of 11 March 1996 on the legal protection of databases, 126 | as amended and/or succeeded, as well as other essentially 127 | equivalent rights anywhere in the world. 128 | 129 | k. You means the individual or entity exercising the Licensed Rights 130 | under this Public License. Your has a corresponding meaning. 131 | 132 | 133 | Section 2 -- Scope. 134 | 135 | a. License grant. 136 | 137 | 1. Subject to the terms and conditions of this Public License, 138 | the Licensor hereby grants You a worldwide, royalty-free, 139 | non-sublicensable, non-exclusive, irrevocable license to 140 | exercise the Licensed Rights in the Licensed Material to: 141 | 142 | a. reproduce and Share the Licensed Material, in whole or 143 | in part; and 144 | 145 | b. produce, reproduce, and Share Adapted Material. 146 | 147 | 2. Exceptions and Limitations. For the avoidance of doubt, where 148 | Exceptions and Limitations apply to Your use, this Public 149 | License does not apply, and You do not need to comply with 150 | its terms and conditions. 151 | 152 | 3. Term. The term of this Public License is specified in Section 153 | 6(a). 154 | 155 | 4. Media and formats; technical modifications allowed. The 156 | Licensor authorizes You to exercise the Licensed Rights in 157 | all media and formats whether now known or hereafter created, 158 | and to make technical modifications necessary to do so. The 159 | Licensor waives and/or agrees not to assert any right or 160 | authority to forbid You from making technical modifications 161 | necessary to exercise the Licensed Rights, including 162 | technical modifications necessary to circumvent Effective 163 | Technological Measures. For purposes of this Public License, 164 | simply making modifications authorized by this Section 2(a) 165 | (4) never produces Adapted Material. 166 | 167 | 5. Downstream recipients. 168 | 169 | a. Offer from the Licensor -- Licensed Material. Every 170 | recipient of the Licensed Material automatically 171 | receives an offer from the Licensor to exercise the 172 | Licensed Rights under the terms and conditions of this 173 | Public License. 174 | 175 | b. No downstream restrictions. You may not offer or impose 176 | any additional or different terms or conditions on, or 177 | apply any Effective Technological Measures to, the 178 | Licensed Material if doing so restricts exercise of the 179 | Licensed Rights by any recipient of the Licensed 180 | Material. 181 | 182 | 6. No endorsement. Nothing in this Public License constitutes or 183 | may be construed as permission to assert or imply that You 184 | are, or that Your use of the Licensed Material is, connected 185 | with, or sponsored, endorsed, or granted official status by, 186 | the Licensor or others designated to receive attribution as 187 | provided in Section 3(a)(1)(A)(i). 188 | 189 | b. Other rights. 190 | 191 | 1. Moral rights, such as the right of integrity, are not 192 | licensed under this Public License, nor are publicity, 193 | privacy, and/or other similar personality rights; however, to 194 | the extent possible, the Licensor waives and/or agrees not to 195 | assert any such rights held by the Licensor to the limited 196 | extent necessary to allow You to exercise the Licensed 197 | Rights, but not otherwise. 198 | 199 | 2. Patent and trademark rights are not licensed under this 200 | Public License. 201 | 202 | 3. To the extent possible, the Licensor waives any right to 203 | collect royalties from You for the exercise of the Licensed 204 | Rights, whether directly or through a collecting society 205 | under any voluntary or waivable statutory or compulsory 206 | licensing scheme. In all other cases the Licensor expressly 207 | reserves any right to collect such royalties. 208 | 209 | 210 | Section 3 -- License Conditions. 211 | 212 | Your exercise of the Licensed Rights is expressly made subject to the 213 | following conditions. 214 | 215 | a. Attribution. 216 | 217 | 1. If You Share the Licensed Material (including in modified 218 | form), You must: 219 | 220 | a. retain the following if it is supplied by the Licensor 221 | with the Licensed Material: 222 | 223 | i. identification of the creator(s) of the Licensed 224 | Material and any others designated to receive 225 | attribution, in any reasonable manner requested by 226 | the Licensor (including by pseudonym if 227 | designated); 228 | 229 | ii. a copyright notice; 230 | 231 | iii. a notice that refers to this Public License; 232 | 233 | iv. a notice that refers to the disclaimer of 234 | warranties; 235 | 236 | v. a URI or hyperlink to the Licensed Material to the 237 | extent reasonably practicable; 238 | 239 | b. indicate if You modified the Licensed Material and 240 | retain an indication of any previous modifications; and 241 | 242 | c. indicate the Licensed Material is licensed under this 243 | Public License, and include the text of, or the URI or 244 | hyperlink to, this Public License. 245 | 246 | 2. You may satisfy the conditions in Section 3(a)(1) in any 247 | reasonable manner based on the medium, means, and context in 248 | which You Share the Licensed Material. For example, it may be 249 | reasonable to satisfy the conditions by providing a URI or 250 | hyperlink to a resource that includes the required 251 | information. 252 | 253 | 3. If requested by the Licensor, You must remove any of the 254 | information required by Section 3(a)(1)(A) to the extent 255 | reasonably practicable. 256 | 257 | 4. If You Share Adapted Material You produce, the Adapter's 258 | License You apply must not prevent recipients of the Adapted 259 | Material from complying with this Public License. 260 | 261 | 262 | Section 4 -- Sui Generis Database Rights. 263 | 264 | Where the Licensed Rights include Sui Generis Database Rights that 265 | apply to Your use of the Licensed Material: 266 | 267 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 268 | to extract, reuse, reproduce, and Share all or a substantial 269 | portion of the contents of the database; 270 | 271 | b. if You include all or a substantial portion of the database 272 | contents in a database in which You have Sui Generis Database 273 | Rights, then the database in which You have Sui Generis Database 274 | Rights (but not its individual contents) is Adapted Material; and 275 | 276 | c. You must comply with the conditions in Section 3(a) if You Share 277 | all or a substantial portion of the contents of the database. 278 | 279 | For the avoidance of doubt, this Section 4 supplements and does not 280 | replace Your obligations under this Public License where the Licensed 281 | Rights include other Copyright and Similar Rights. 282 | 283 | 284 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 285 | 286 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 287 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 288 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 289 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 290 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 291 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 292 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 293 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 294 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 295 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 296 | 297 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 298 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 299 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 300 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 301 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 302 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 303 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 304 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 305 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 306 | 307 | c. The disclaimer of warranties and limitation of liability provided 308 | above shall be interpreted in a manner that, to the extent 309 | possible, most closely approximates an absolute disclaimer and 310 | waiver of all liability. 311 | 312 | 313 | Section 6 -- Term and Termination. 314 | 315 | a. This Public License applies for the term of the Copyright and 316 | Similar Rights licensed here. However, if You fail to comply with 317 | this Public License, then Your rights under this Public License 318 | terminate automatically. 319 | 320 | b. Where Your right to use the Licensed Material has terminated under 321 | Section 6(a), it reinstates: 322 | 323 | 1. automatically as of the date the violation is cured, provided 324 | it is cured within 30 days of Your discovery of the 325 | violation; or 326 | 327 | 2. upon express reinstatement by the Licensor. 328 | 329 | For the avoidance of doubt, this Section 6(b) does not affect any 330 | right the Licensor may have to seek remedies for Your violations 331 | of this Public License. 332 | 333 | c. For the avoidance of doubt, the Licensor may also offer the 334 | Licensed Material under separate terms or conditions or stop 335 | distributing the Licensed Material at any time; however, doing so 336 | will not terminate this Public License. 337 | 338 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 339 | License. 340 | 341 | 342 | Section 7 -- Other Terms and Conditions. 343 | 344 | a. The Licensor shall not be bound by any additional or different 345 | terms or conditions communicated by You unless expressly agreed. 346 | 347 | b. Any arrangements, understandings, or agreements regarding the 348 | Licensed Material not stated herein are separate from and 349 | independent of the terms and conditions of this Public License. 350 | 351 | 352 | Section 8 -- Interpretation. 353 | 354 | a. For the avoidance of doubt, this Public License does not, and 355 | shall not be interpreted to, reduce, limit, restrict, or impose 356 | conditions on any use of the Licensed Material that could lawfully 357 | be made without permission under this Public License. 358 | 359 | b. To the extent possible, if any provision of this Public License is 360 | deemed unenforceable, it shall be automatically reformed to the 361 | minimum extent necessary to make it enforceable. If the provision 362 | cannot be reformed, it shall be severed from this Public License 363 | without affecting the enforceability of the remaining terms and 364 | conditions. 365 | 366 | c. No term or condition of this Public License will be waived and no 367 | failure to comply consented to unless expressly agreed to by the 368 | Licensor. 369 | 370 | d. Nothing in this Public License constitutes or may be interpreted 371 | as a limitation upon, or waiver of, any privileges and immunities 372 | that apply to the Licensor or You, including from the legal 373 | processes of any jurisdiction or authority. 374 | 375 | 376 | ======================================================================= 377 | 378 | Creative Commons is not a party to its public 379 | licenses. Notwithstanding, Creative Commons may elect to apply one of 380 | its public licenses to material it publishes and in those instances 381 | will be considered the “Licensor.” The text of the Creative Commons 382 | public licenses is dedicated to the public domain under the CC0 Public 383 | Domain Dedication. Except for the limited purpose of indicating that 384 | material is shared under a Creative Commons public license or as 385 | otherwise permitted by the Creative Commons policies published at 386 | creativecommons.org/policies, Creative Commons does not authorize the 387 | use of the trademark "Creative Commons" or any other trademark or logo 388 | of Creative Commons without its prior written consent including, 389 | without limitation, in connection with any unauthorized modifications 390 | to any of its public licenses or any other arrangements, 391 | understandings, or agreements concerning use of licensed material. For 392 | the avoidance of doubt, this paragraph does not form part of the 393 | public licenses. 394 | 395 | Creative Commons may be contacted at creativecommons.org. 396 | -------------------------------------------------------------------------------- /Project.toml: -------------------------------------------------------------------------------- 1 | name = "DIPTutorials" 2 | uuid = "cd44d23c-5813-4f94-9d85-42c716d3e259" 3 | authors = ["Johnny Chen "] 4 | version = "0.0.1" 5 | 6 | [deps] 7 | Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" 8 | Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" 9 | ZipFile = "a5390f91-8eb1-5f08-bee0-b1d1ffed6cea" 10 | 11 | [compat] 12 | ZipFile = "0.9" 13 | julia = "1.3" 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Julia 数字图像处理入门 2 | 3 | [![CC BY 4.0][cc-by-shield]][cc-by] 4 | [![][docs-latest-img]][docs-latest-url] 5 | [![][action-img]][action-url] 6 | 7 | 8 | 关于 Julia 下图像处理的系列教程: 9 | 10 | * 🚧JuliaImages 入门 11 | * 🚧《数字图像处理》[1]和[2]中涉及到的一些例子的Julia实现 12 | 13 | # 参考文献 14 | 15 | * [1] Gonzalez, Rafael C., Richard E. Woods, and Barry R. Masters. "Digital image processing third edition." Pearson (2008). [中文版](https://item.jd.com/12191950.html) 16 | * [2] Gonzalez, Rafael C., and Richard E. Woods "Digital image processing fourth edition." Pearson (2017). 17 | 18 | # 许可 19 | 20 | [![CC BY 4.0][cc-by-image]][cc-by] 21 | 22 | 本作品采用[知识共享署名 4.0 国际许可协议][cc-by]进行许可。 23 | 24 | 25 | 26 | [cc-by]: http://creativecommons.org/licenses/by/4.0/ 27 | [cc-by-image]: https://i.creativecommons.org/l/by/4.0/88x31.png 28 | [cc-by-shield]: https://img.shields.io/badge/License-CC%20BY%204.0-lightgrey.svg 29 | 30 | [docs-latest-img]: https://img.shields.io/badge/docs-latest-blue.svg 31 | [docs-latest-url]: https://johnnychen94.github.io/Image-Processing-in-Julia/dev/ 32 | 33 | 34 | [action-img]: https://github.com/johnnychen94/Image-Processing-in-Julia/workflows/Documentation/badge.svg 35 | [action-url]: https://github.com/johnnychen94/Image-Processing-in-Julia/actions 36 | -------------------------------------------------------------------------------- /docs/Manifest.toml: -------------------------------------------------------------------------------- 1 | # This file is machine-generated - editing it directly is not advised 2 | 3 | [[AbstractFFTs]] 4 | deps = ["LinearAlgebra"] 5 | git-tree-sha1 = "051c95d6836228d120f5f4b984dd5aba1624f716" 6 | uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" 7 | version = "0.5.0" 8 | 9 | [[AxisAlgorithms]] 10 | deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] 11 | git-tree-sha1 = "a4d07a1c313392a77042855df46c5f534076fab9" 12 | uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950" 13 | version = "1.0.0" 14 | 15 | [[AxisArrays]] 16 | deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"] 17 | git-tree-sha1 = "f31f50712cbdf40ee8287f0443b57503e34122ef" 18 | uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9" 19 | version = "0.4.3" 20 | 21 | [[Base64]] 22 | uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" 23 | 24 | [[CEnum]] 25 | git-tree-sha1 = "62847acab40e6855a9b5905ccb99c2b5cf6b3ebb" 26 | uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" 27 | version = "0.2.0" 28 | 29 | [[CatIndices]] 30 | deps = ["CustomUnitRanges", "OffsetArrays"] 31 | git-tree-sha1 = "0c91e4fcda51bbd881c5d49ef784460750abcac0" 32 | uuid = "aafaddc9-749c-510e-ac4f-586e18779b91" 33 | version = "0.2.1" 34 | 35 | [[Codecs]] 36 | deps = ["Test"] 37 | git-tree-sha1 = "70885e5e038cba1c4c17a84ad6c40756e10a4fb5" 38 | uuid = "19ecbf4d-ef7c-5e4b-b54a-0a0ff23c5aed" 39 | version = "0.5.0" 40 | 41 | [[ColorTypes]] 42 | deps = ["FixedPointNumbers", "Random"] 43 | git-tree-sha1 = "f746d4fc892fdf683b5c22064c8e99b2f5b990e7" 44 | uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" 45 | version = "0.10.2" 46 | 47 | [[ColorVectorSpace]] 48 | deps = ["ColorTypes", "Colors", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "StatsBase"] 49 | git-tree-sha1 = "bd0c0c81a39923bc03f9c3b61d89ad816e741002" 50 | uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" 51 | version = "0.8.5" 52 | 53 | [[Colors]] 54 | deps = ["ColorTypes", "FixedPointNumbers", "InteractiveUtils", "Reexport"] 55 | git-tree-sha1 = "2fdeb981ebcf52cd800ddb6a0aa5eac34153552d" 56 | uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" 57 | version = "0.12.0" 58 | 59 | [[Compat]] 60 | deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"] 61 | git-tree-sha1 = "ed2c4abadf84c53d9e58510b5fc48912c2336fbb" 62 | uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" 63 | version = "2.2.0" 64 | 65 | [[CompilerSupportLibraries_jll]] 66 | deps = ["Libdl", "Pkg"] 67 | git-tree-sha1 = "7c4f882c41faa72118841185afc58a2eb00ef612" 68 | uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" 69 | version = "0.3.3+0" 70 | 71 | [[ComputationalResources]] 72 | git-tree-sha1 = "52cb3ec90e8a8bea0e62e275ba577ad0f74821f7" 73 | uuid = "ed09eef8-17a6-5b46-8889-db040fac31e3" 74 | version = "0.3.2" 75 | 76 | [[CoordinateTransformations]] 77 | deps = ["LinearAlgebra", "Rotations", "StaticArrays"] 78 | git-tree-sha1 = "71333ea3f841bca6c1aa2863f11758eb9b37bfbc" 79 | uuid = "150eb455-5306-5404-9cee-2592286d6298" 80 | version = "0.5.1" 81 | 82 | [[CustomUnitRanges]] 83 | git-tree-sha1 = "0d42a23be3acfb3c58569b28ed3ab8bd67af5ced" 84 | uuid = "dc8bdbbb-1ca9-579f-8c36-e416f6a65cce" 85 | version = "1.0.0" 86 | 87 | [[DIPTutorials]] 88 | deps = ["DemoCards", "Pkg", "Printf", "ZipFile"] 89 | git-tree-sha1 = "68cced0a91fa89800b755b1cf4a50cbc491bded2" 90 | repo-rev = "master" 91 | repo-url = "https://github.com/johnnychen94/Image-Processing-in-Julia" 92 | uuid = "cd44d23c-5813-4f94-9d85-42c716d3e259" 93 | version = "0.0.1" 94 | 95 | [[DataAPI]] 96 | git-tree-sha1 = "00612b2fbe534a539dc7f70106c71e3a943d9b98" 97 | uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" 98 | version = "1.2.0" 99 | 100 | [[DataStructures]] 101 | deps = ["InteractiveUtils", "OrderedCollections"] 102 | git-tree-sha1 = "9faa13be79557bf4c5713fb912b0e3c5aa33d046" 103 | uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" 104 | version = "0.17.13" 105 | 106 | [[DataValueInterfaces]] 107 | git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" 108 | uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" 109 | version = "1.0.0" 110 | 111 | [[Dates]] 112 | deps = ["Printf"] 113 | uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" 114 | 115 | [[DelimitedFiles]] 116 | deps = ["Mmap"] 117 | uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" 118 | 119 | [[DemoCards]] 120 | deps = ["Documenter", "FileIO", "ImageCore", "JSON", "Literate", "Mustache", "Suppressor", "YAML"] 121 | git-tree-sha1 = "64af10e1e5bb6e6eeb34700390fc7d0dcdb2f2e2" 122 | uuid = "311a05b2-6137-4a5a-b473-18580a3d38b5" 123 | version = "0.2.1" 124 | 125 | [[Distances]] 126 | deps = ["LinearAlgebra", "Statistics"] 127 | git-tree-sha1 = "23717536c81b63e250f682b0e0933769eecd1411" 128 | uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" 129 | version = "0.8.2" 130 | 131 | [[Distributed]] 132 | deps = ["Random", "Serialization", "Sockets"] 133 | uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" 134 | 135 | [[DocStringExtensions]] 136 | deps = ["LibGit2", "Markdown", "Pkg", "Test"] 137 | git-tree-sha1 = "88bb0edb352b16608036faadcc071adda068582a" 138 | uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" 139 | version = "0.8.1" 140 | 141 | [[Documenter]] 142 | deps = ["Base64", "Dates", "DocStringExtensions", "InteractiveUtils", "JSON", "LibGit2", "Logging", "Markdown", "REPL", "Test", "Unicode"] 143 | git-tree-sha1 = "bc99c157ff2957c058a1067061d16c2c83d1ec42" 144 | uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4" 145 | version = "0.24.9" 146 | 147 | [[EllipsisNotation]] 148 | git-tree-sha1 = "65dad386e877850e6fce4fc77f60fe75a468ce9d" 149 | uuid = "da5c29d0-fa7d-589e-88eb-ea29b0a81949" 150 | version = "0.4.0" 151 | 152 | [[FFTViews]] 153 | deps = ["CustomUnitRanges", "FFTW"] 154 | git-tree-sha1 = "70a0cfd9b1c86b0209e38fbfe6d8231fd606eeaf" 155 | uuid = "4f61f5a4-77b1-5117-aa51-3ab5ef4ef0cd" 156 | version = "0.3.1" 157 | 158 | [[FFTW]] 159 | deps = ["AbstractFFTs", "FFTW_jll", "IntelOpenMP_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Reexport"] 160 | git-tree-sha1 = "109d82fa4b00429f9afcce873e9f746f11f018d3" 161 | uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" 162 | version = "1.2.0" 163 | 164 | [[FFTW_jll]] 165 | deps = ["Libdl", "Pkg"] 166 | git-tree-sha1 = "6c975cd606128d45d1df432fb812d6eb10fee00b" 167 | uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" 168 | version = "3.3.9+5" 169 | 170 | [[FileIO]] 171 | deps = ["Pkg"] 172 | git-tree-sha1 = "3d7cb2c4c850439f19c4d6d3fbe1dce6481cddb1" 173 | uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" 174 | version = "1.2.4" 175 | 176 | [[FixedPointNumbers]] 177 | git-tree-sha1 = "3ba9ea634d4c8b289d590403b4a06f8e227a6238" 178 | uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" 179 | version = "0.8.0" 180 | 181 | [[Graphics]] 182 | deps = ["Colors", "LinearAlgebra", "NaNMath"] 183 | git-tree-sha1 = "45d684ead5b65c043ad46bd5be750d61c39d7ef8" 184 | uuid = "a2bd30eb-e257-5431-a919-1863eab51364" 185 | version = "1.0.2" 186 | 187 | [[IdentityRanges]] 188 | deps = ["OffsetArrays"] 189 | git-tree-sha1 = "be8fcd695c4da16a1d6d0cd213cb88090a150e3b" 190 | uuid = "bbac6d45-d8f3-5730-bfe4-7a449cd117ca" 191 | version = "0.3.1" 192 | 193 | [[ImageAxes]] 194 | deps = ["AxisArrays", "ImageCore", "MappedArrays", "Reexport", "SimpleTraits"] 195 | git-tree-sha1 = "c0aca8db7e9fddda18c9cebff5d147b0e799d676" 196 | uuid = "2803e5a7-5153-5ecf-9a86-9b4c37f5f5ac" 197 | version = "0.6.4" 198 | 199 | [[ImageContrastAdjustment]] 200 | deps = ["ColorVectorSpace", "ImageCore", "ImageTransformations", "MappedArrays", "Parameters"] 201 | git-tree-sha1 = "d22d89e03c8f617e0ae31886ca60e291b548cf59" 202 | uuid = "f332f351-ec65-5f6a-b3d1-319c6670881a" 203 | version = "0.3.5" 204 | 205 | [[ImageCore]] 206 | deps = ["Colors", "FixedPointNumbers", "Graphics", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "Reexport", "Requires"] 207 | git-tree-sha1 = "a652c05f8f374861580d420b420fddf3e2e84312" 208 | uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534" 209 | version = "0.8.14" 210 | 211 | [[ImageDistances]] 212 | deps = ["ColorVectorSpace", "Distances", "ImageCore", "LinearAlgebra", "MappedArrays", "Statistics"] 213 | git-tree-sha1 = "cf9b02b9f5e33c768c223de6d8f7d1b6d0cf4136" 214 | uuid = "51556ac3-7006-55f5-8cb3-34580c88182d" 215 | version = "0.2.7" 216 | 217 | [[ImageFiltering]] 218 | deps = ["CatIndices", "ColorVectorSpace", "ComputationalResources", "DataStructures", "FFTViews", "FFTW", "ImageCore", "ImageMetadata", "LinearAlgebra", "MappedArrays", "OffsetArrays", "Requires", "StaticArrays", "Statistics", "TiledIteration"] 219 | git-tree-sha1 = "c8aebfbdbb2f12665448de007f635a1910b476e4" 220 | uuid = "6a3955dd-da59-5b1f-98d4-e7296123deb5" 221 | version = "0.6.11" 222 | 223 | [[ImageIO]] 224 | deps = ["FileIO", "PNGFiles"] 225 | git-tree-sha1 = "124651759b8958e1f2340ea52a84e745813f8e7e" 226 | uuid = "82e4d734-157c-48bb-816b-45c225c6df19" 227 | version = "0.1.1" 228 | 229 | [[ImageMagick]] 230 | deps = ["FileIO", "ImageCore", "ImageMagick_jll", "InteractiveUtils", "Libdl", "Pkg", "Random"] 231 | git-tree-sha1 = "cfd7109dbcffb0b3cb46b5697863ae4e2065bbb3" 232 | uuid = "6218d12a-5da1-5696-b52f-db25d2ecc6d1" 233 | version = "1.1.4" 234 | 235 | [[ImageMagick_jll]] 236 | deps = ["JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pkg", "Zlib_jll", "libpng_jll"] 237 | git-tree-sha1 = "b363bb9be6948455a55cfd98813e77c6c2abf856" 238 | uuid = "c73af94c-d91f-53ed-93a7-00f77d67a9d7" 239 | version = "6.9.10-12+1" 240 | 241 | [[ImageMetadata]] 242 | deps = ["AxisArrays", "ColorVectorSpace", "ImageAxes", "ImageCore", "IndirectArrays"] 243 | git-tree-sha1 = "5c2c78dc11343d83320e790379e0f58de3aa1b7e" 244 | uuid = "bc367c6b-8a6b-528e-b4bd-a4b897500b49" 245 | version = "0.9.1" 246 | 247 | [[ImageMorphology]] 248 | deps = ["ImageCore"] 249 | git-tree-sha1 = "e41dd25ebf8de738a8ff4f1058a1823a7fe509cf" 250 | uuid = "787d08f9-d448-5407-9aad-5290dd7ab264" 251 | version = "0.2.5" 252 | 253 | [[ImageQualityIndexes]] 254 | deps = ["ColorVectorSpace", "ImageCore", "ImageDistances", "ImageFiltering", "MappedArrays", "Statistics"] 255 | git-tree-sha1 = "3af30042a8fe85612a6a106cb20ca2fa1eb67bd6" 256 | uuid = "2996bd0c-7a13-11e9-2da2-2f5ce47296a9" 257 | version = "0.1.4" 258 | 259 | [[ImageShow]] 260 | deps = ["Base64", "FileIO", "ImageCore", "Requires"] 261 | git-tree-sha1 = "c9df184bc7c2e665f971079174aabb7d18f1845f" 262 | uuid = "4e3cecfd-b093-5904-9786-8bbb286a6a31" 263 | version = "0.2.3" 264 | 265 | [[ImageTransformations]] 266 | deps = ["AxisAlgorithms", "ColorVectorSpace", "CoordinateTransformations", "IdentityRanges", "ImageCore", "Interpolations", "OffsetArrays", "StaticArrays"] 267 | git-tree-sha1 = "34e3b7549af44043e37ba321334afa322ec63a9d" 268 | uuid = "02fcd773-0e25-5acc-982a-7f6622650795" 269 | version = "0.8.4" 270 | 271 | [[Images]] 272 | deps = ["AxisArrays", "Base64", "ColorVectorSpace", "FileIO", "Graphics", "ImageAxes", "ImageContrastAdjustment", "ImageCore", "ImageDistances", "ImageFiltering", "ImageMetadata", "ImageMorphology", "ImageQualityIndexes", "ImageShow", "ImageTransformations", "IndirectArrays", "MappedArrays", "OffsetArrays", "Random", "Reexport", "SparseArrays", "StaticArrays", "Statistics", "StatsBase", "TiledIteration"] 273 | git-tree-sha1 = "bc7ecabe5ef4d64fea25660bc5aa514a603e4468" 274 | uuid = "916415d5-f1e6-5110-898d-aaa5f9f070e0" 275 | version = "0.22.2" 276 | 277 | [[IndirectArrays]] 278 | git-tree-sha1 = "c2a145a145dc03a7620af1444e0264ef907bd44f" 279 | uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959" 280 | version = "0.5.1" 281 | 282 | [[IntelOpenMP_jll]] 283 | deps = ["Libdl", "Pkg"] 284 | git-tree-sha1 = "fb8e1c7a5594ba56f9011310790e03b5384998d6" 285 | uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" 286 | version = "2018.0.3+0" 287 | 288 | [[InteractiveUtils]] 289 | deps = ["Markdown"] 290 | uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" 291 | 292 | [[Interpolations]] 293 | deps = ["AxisAlgorithms", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] 294 | git-tree-sha1 = "3af735234d9b1ff9ff1af89875735cd9549c0c5f" 295 | uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" 296 | version = "0.12.9" 297 | 298 | [[IntervalSets]] 299 | deps = ["Dates", "EllipsisNotation", "Statistics"] 300 | git-tree-sha1 = "2daa370870d2a4d198642277d050aa7d34a7cad2" 301 | uuid = "8197267c-284f-5f27-9208-e0e47529a953" 302 | version = "0.5.0" 303 | 304 | [[IterTools]] 305 | git-tree-sha1 = "05110a2ab1fc5f932622ffea2a003221f4782c18" 306 | uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" 307 | version = "1.3.0" 308 | 309 | [[IteratorInterfaceExtensions]] 310 | git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" 311 | uuid = "82899510-4779-5014-852e-03e436cf321d" 312 | version = "1.0.0" 313 | 314 | [[JSON]] 315 | deps = ["Dates", "Mmap", "Parsers", "Unicode"] 316 | git-tree-sha1 = "b34d7cef7b337321e97d22242c3c2b91f476748e" 317 | uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" 318 | version = "0.21.0" 319 | 320 | [[JpegTurbo_jll]] 321 | deps = ["Libdl", "Pkg"] 322 | git-tree-sha1 = "b007cedc10bb017cdae3af0062fe4dd29b483c70" 323 | uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" 324 | version = "2.0.1+0" 325 | 326 | [[LibGit2]] 327 | deps = ["Printf"] 328 | uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" 329 | 330 | [[Libdl]] 331 | uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" 332 | 333 | [[Libtiff_jll]] 334 | deps = ["JpegTurbo_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"] 335 | git-tree-sha1 = "0764d2317bf99a0120325720f83d356f6016b05c" 336 | uuid = "89763e89-9b03-5906-acba-b20f662cd828" 337 | version = "4.0.10+1" 338 | 339 | [[LinearAlgebra]] 340 | deps = ["Libdl"] 341 | uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" 342 | 343 | [[Literate]] 344 | deps = ["Base64", "JSON", "REPL"] 345 | git-tree-sha1 = "ac48e6b189a3e993788e1776485625bcbed3504d" 346 | uuid = "98b081ad-f1c9-55d3-8b20-4c87d4299306" 347 | version = "2.3.1" 348 | 349 | [[Logging]] 350 | uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" 351 | 352 | [[MKL_jll]] 353 | deps = ["IntelOpenMP_jll", "Libdl", "Pkg"] 354 | git-tree-sha1 = "720629cc8cbd12c146ca01b661fd1a6cf66e2ff4" 355 | uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" 356 | version = "2019.0.117+2" 357 | 358 | [[MacroTools]] 359 | deps = ["Markdown", "Random"] 360 | git-tree-sha1 = "f7d2e3f654af75f01ec49be82c231c382214223a" 361 | uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" 362 | version = "0.5.5" 363 | 364 | [[MappedArrays]] 365 | git-tree-sha1 = "e2a02fe7ee86a10c707ff1756ab1650b40b140bb" 366 | uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" 367 | version = "0.2.2" 368 | 369 | [[Markdown]] 370 | deps = ["Base64"] 371 | uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" 372 | 373 | [[Missings]] 374 | deps = ["DataAPI"] 375 | git-tree-sha1 = "de0a5ce9e5289f27df672ffabef4d1e5861247d5" 376 | uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" 377 | version = "0.4.3" 378 | 379 | [[Mmap]] 380 | uuid = "a63ad114-7e13-5084-954f-fe012c677804" 381 | 382 | [[MosaicViews]] 383 | deps = ["OffsetArrays", "PaddedViews"] 384 | git-tree-sha1 = "b483b88403ac0ac01667778cbb29462b111b1deb" 385 | uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389" 386 | version = "0.2.2" 387 | 388 | [[Mustache]] 389 | deps = ["Printf", "Tables"] 390 | git-tree-sha1 = "2e11fc5de3a01d23482a257e22009ddaab058d9a" 391 | uuid = "ffc61752-8dc7-55ee-8c37-f3e9cdd09e70" 392 | version = "1.0.2" 393 | 394 | [[NaNMath]] 395 | git-tree-sha1 = "928b8ca9b2791081dc71a51c55347c27c618760f" 396 | uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" 397 | version = "0.3.3" 398 | 399 | [[OffsetArrays]] 400 | git-tree-sha1 = "930db8ef90483570107f2396b1ffc6680f08e8b7" 401 | uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" 402 | version = "1.0.4" 403 | 404 | [[OpenSpecFun_jll]] 405 | deps = ["CompilerSupportLibraries_jll", "Libdl", "Pkg"] 406 | git-tree-sha1 = "d51c416559217d974a1113522d5919235ae67a87" 407 | uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" 408 | version = "0.5.3+3" 409 | 410 | [[OrderedCollections]] 411 | deps = ["Random", "Serialization", "Test"] 412 | git-tree-sha1 = "c4c13474d23c60d20a67b217f1d7f22a40edf8f1" 413 | uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" 414 | version = "1.1.0" 415 | 416 | [[PNGFiles]] 417 | deps = ["CEnum", "ImageCore", "libpng_jll"] 418 | git-tree-sha1 = "e3205c45c6f4d9cb85d05e5ef7d0ffe54c6992ac" 419 | uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883" 420 | version = "0.1.3" 421 | 422 | [[PaddedViews]] 423 | deps = ["OffsetArrays"] 424 | git-tree-sha1 = "100195a79b577d5747db98bf1732c3686285fa1e" 425 | uuid = "5432bcbf-9aad-5242-b902-cca2824c8663" 426 | version = "0.5.5" 427 | 428 | [[Parameters]] 429 | deps = ["OrderedCollections"] 430 | git-tree-sha1 = "b62b2558efb1eef1fa44e4be5ff58a515c287e38" 431 | uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" 432 | version = "0.12.0" 433 | 434 | [[Parsers]] 435 | deps = ["Dates", "Test"] 436 | git-tree-sha1 = "f8f5d2d4b4b07342e5811d2b6428e45524e241df" 437 | uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" 438 | version = "1.0.2" 439 | 440 | [[Pkg]] 441 | deps = ["Dates", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"] 442 | uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" 443 | 444 | [[Printf]] 445 | deps = ["Unicode"] 446 | uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" 447 | 448 | [[REPL]] 449 | deps = ["InteractiveUtils", "Markdown", "Sockets"] 450 | uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" 451 | 452 | [[Random]] 453 | deps = ["Serialization"] 454 | uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" 455 | 456 | [[RangeArrays]] 457 | git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5" 458 | uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d" 459 | version = "0.3.2" 460 | 461 | [[Ratios]] 462 | git-tree-sha1 = "37d210f612d70f3f7d57d488cb3b6eff56ad4e41" 463 | uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439" 464 | version = "0.4.0" 465 | 466 | [[Reexport]] 467 | deps = ["Pkg"] 468 | git-tree-sha1 = "7b1d07f411bc8ddb7977ec7f377b97b158514fe0" 469 | uuid = "189a3867-3050-52da-a836-e630ba90ab69" 470 | version = "0.2.0" 471 | 472 | [[Requires]] 473 | deps = ["UUIDs"] 474 | git-tree-sha1 = "d37400976e98018ee840e0ca4f9d20baa231dc6b" 475 | uuid = "ae029012-a4dd-5104-9daa-d747884805df" 476 | version = "1.0.1" 477 | 478 | [[Rotations]] 479 | deps = ["LinearAlgebra", "StaticArrays", "Statistics"] 480 | git-tree-sha1 = "d5f83867093db7319a9366d55f29280ecae9bcda" 481 | uuid = "6038ab10-8711-5258-84ad-4b1120ba62dc" 482 | version = "0.13.0" 483 | 484 | [[SHA]] 485 | uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" 486 | 487 | [[Serialization]] 488 | uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" 489 | 490 | [[SharedArrays]] 491 | deps = ["Distributed", "Mmap", "Random", "Serialization"] 492 | uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" 493 | 494 | [[SimpleTraits]] 495 | deps = ["InteractiveUtils", "MacroTools"] 496 | git-tree-sha1 = "2ee666b24ab8be6a922f9d6c11a86e1a703a7dda" 497 | uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" 498 | version = "0.9.2" 499 | 500 | [[Sockets]] 501 | uuid = "6462fe0b-24de-5631-8697-dd941f90decc" 502 | 503 | [[SortingAlgorithms]] 504 | deps = ["DataStructures", "Random", "Test"] 505 | git-tree-sha1 = "03f5898c9959f8115e30bc7226ada7d0df554ddd" 506 | uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" 507 | version = "0.3.1" 508 | 509 | [[SparseArrays]] 510 | deps = ["LinearAlgebra", "Random"] 511 | uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" 512 | 513 | [[SpecialFunctions]] 514 | deps = ["OpenSpecFun_jll"] 515 | git-tree-sha1 = "e19b98acb182567bcb7b75bb5d9eedf3a3b5ec6c" 516 | uuid = "276daf66-3868-5448-9aa4-cd146d93841b" 517 | version = "0.10.0" 518 | 519 | [[StaticArrays]] 520 | deps = ["LinearAlgebra", "Random", "Statistics"] 521 | git-tree-sha1 = "5a3bcb6233adabde68ebc97be66e95dcb787424c" 522 | uuid = "90137ffa-7385-5640-81b9-e52037218182" 523 | version = "0.12.1" 524 | 525 | [[Statistics]] 526 | deps = ["LinearAlgebra", "SparseArrays"] 527 | uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" 528 | 529 | [[StatsBase]] 530 | deps = ["DataAPI", "DataStructures", "LinearAlgebra", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics"] 531 | git-tree-sha1 = "a6102b1f364befdb05746f386b67c6b7e3262c45" 532 | uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" 533 | version = "0.33.0" 534 | 535 | [[Suppressor]] 536 | git-tree-sha1 = "a819d77f31f83e5792a76081eee1ea6342ab8787" 537 | uuid = "fd094767-a336-5f1f-9728-57cf17d0bbfb" 538 | version = "0.2.0" 539 | 540 | [[TableTraits]] 541 | deps = ["IteratorInterfaceExtensions"] 542 | git-tree-sha1 = "b1ad568ba658d8cbb3b892ed5380a6f3e781a81e" 543 | uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" 544 | version = "1.0.0" 545 | 546 | [[Tables]] 547 | deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "TableTraits", "Test"] 548 | git-tree-sha1 = "c45dcc27331febabc20d86cb3974ef095257dcf3" 549 | uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" 550 | version = "1.0.4" 551 | 552 | [[Test]] 553 | deps = ["Distributed", "InteractiveUtils", "Logging", "Random"] 554 | uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" 555 | 556 | [[TestImages]] 557 | deps = ["AxisArrays", "FileIO", "Pkg"] 558 | git-tree-sha1 = "af65508b4f0c57e0497ffa9b824b7c501472c8fd" 559 | uuid = "5e47fb64-e119-507b-a336-dd2b206d9990" 560 | version = "1.0.3" 561 | 562 | [[TiledIteration]] 563 | deps = ["OffsetArrays"] 564 | git-tree-sha1 = "98693daea9bb49aba71eaad6b168b152d2310358" 565 | uuid = "06e1c1a7-607b-532d-9fad-de7d9aa2abac" 566 | version = "0.2.4" 567 | 568 | [[UUIDs]] 569 | deps = ["Random", "SHA"] 570 | uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" 571 | 572 | [[Unicode]] 573 | uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" 574 | 575 | [[WoodburyMatrices]] 576 | deps = ["LinearAlgebra", "SparseArrays"] 577 | git-tree-sha1 = "28ffe06d28b1ba8fdb2f36ec7bb079fac81bac0d" 578 | uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" 579 | version = "0.5.2" 580 | 581 | [[YAML]] 582 | deps = ["Codecs", "Compat"] 583 | git-tree-sha1 = "3bde77cee95cce0c0b9b18813d85e18e8ed4f415" 584 | uuid = "ddb6d928-2868-570f-bddf-ab3f9cf99eb6" 585 | version = "0.3.2" 586 | 587 | [[ZipFile]] 588 | deps = ["Libdl", "Printf", "Zlib_jll"] 589 | git-tree-sha1 = "8748302cfdec02c4ae9c97b112cf10003f7f767f" 590 | uuid = "a5390f91-8eb1-5f08-bee0-b1d1ffed6cea" 591 | version = "0.9.1" 592 | 593 | [[Zlib_jll]] 594 | deps = ["Libdl", "Pkg"] 595 | git-tree-sha1 = "2f6c3e15e20e036ee0a0965879b31442b7ec50fa" 596 | uuid = "83775a58-1f1d-513f-b197-d71354ab007a" 597 | version = "1.2.11+9" 598 | 599 | [[Zstd_jll]] 600 | deps = ["Libdl", "Pkg"] 601 | git-tree-sha1 = "aa97e3e240e86010da61254b0045b7175ead0659" 602 | uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" 603 | version = "1.4.4+0" 604 | 605 | [[libpng_jll]] 606 | deps = ["Libdl", "Pkg", "Zlib_jll"] 607 | git-tree-sha1 = "594cb058723c13941cf463fd09e5859499594f50" 608 | uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" 609 | version = "1.6.37+3" 610 | -------------------------------------------------------------------------------- /docs/Project.toml: -------------------------------------------------------------------------------- 1 | [deps] 2 | DIPTutorials = "cd44d23c-5813-4f94-9d85-42c716d3e259" 3 | DemoCards = "311a05b2-6137-4a5a-b473-18580a3d38b5" 4 | Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" 5 | FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" 6 | ImageIO = "82e4d734-157c-48bb-816b-45c225c6df19" 7 | ImageMagick = "6218d12a-5da1-5696-b52f-db25d2ecc6d1" 8 | Images = "916415d5-f1e6-5110-898d-aaa5f9f070e0" 9 | TestImages = "5e47fb64-e119-507b-a336-dd2b206d9990" 10 | 11 | [compat] 12 | DemoCards = "0.2" 13 | Documenter = "0.24" 14 | FileIO = "1" 15 | ImageIO = "0" 16 | ImageMagick = "1" 17 | Images = "0.22" 18 | TestImages = "1" 19 | julia = "1.3" 20 | -------------------------------------------------------------------------------- /docs/dip/ch2/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Chapter 2: Digital Image Fundamentals" 3 | } 4 | -------------------------------------------------------------------------------- /docs/dip/ch2/example_2.2.jl: -------------------------------------------------------------------------------- 1 | # --- 2 | # cover: example_2_2.png 3 | # id: dip_example_2_2 4 | # --- 5 | 6 | # 本例展示了图片在不同空间分辨率下的显示效果 7 | 8 | using Images, DIPTutorials 9 | 10 | # 读取示例图片 11 | ori_img = load(DIP3e.get_filepath("Fig0220")) # 3692×2812 Gray image 12 | 13 | # 由于dpi是一个跟打印有关的概念,这里以原始图片为标准大小进行模拟: 14 | # 15 | # 1. 对原始图片进行下采样 16 | # 2. 将下采样的图片再上采样回原尺寸 17 | # 18 | # 简单起见,下采样与上采样使用了`imresize`函数,关于`imresize`的实现在[例2-4](@ref dip_example_2_4)中会介绍 19 | 20 | ## 设置DPI 21 | img_dpis = [1250, 300, 150, 72] 22 | img_sizes = [ceil.(Int, dpi/1250 .* size(ori_img)) for dpi in img_dpis] 23 | ## 下采样 24 | downsampled_imgs = [imresize(ori_img, sz) for sz in img_sizes] 25 | ## 上采样 26 | upsampled_imgs = [imresize(img, size(ori_img)) for img in downsampled_imgs] 27 | nothing #hide #!jl 28 | 29 | # 展示结果:第一行为下采样之后的结果,第二行为对应放大之后显示的结果。 30 | # 从结果可以看到,在相同尺寸下显示/打印出来时,图片分辨率越低意味着dpi越低,锯齿状也越明显 31 | vcat(mosaicview(downsampled_imgs, nrow=1), 32 | mosaicview(upsampled_imgs, nrow=1)) 33 | 34 | # save cover #src 35 | save("example_2_2.png", imresize(ori_img, (220, 200))) #src 36 | -------------------------------------------------------------------------------- /docs/dip/index.md: -------------------------------------------------------------------------------- 1 | # [《数字图像处理》示例代码](@id dip_index) 2 | 3 | 《数字图像处理》第三版[1]及第四版[2]中涉及到的一些例子以及习题的Julia实现,主要以第三版为主。部分代码会分成两部分, 4 | 第一部分是根据书中叙述的内容来动手实现其功能,第二部分是作为调包侠来直接使用 JuliaImages 提供的功能。这里使用的图片 5 | 来源于[DIP3e image database](http://www.imageprocessingplace.com/DIP-3E/dip3e_book_images_downloads.htm)。 6 | 7 | !!! note 8 | 国内数字图像处理[1]存在中文版及英文原版,本文档写作时主要参考的是英文原版,因此中文叙述可能与中文版中不太一致。 9 | 10 | {{{democards}}} 11 | 12 | # 参考文献 13 | 14 | * [1] Gonzalez, Rafael C., Richard E. Woods, and Barry R. Masters. "Digital image processing third edition." Pearson International Edition (2008). [中文版](https://item.jd.com/12191950.html) 15 | * [2] Gonzalez, Rafael C., and Richard E. Woods "Digital image processing fourth edition." Pearson (2017). 16 | -------------------------------------------------------------------------------- /docs/make.jl: -------------------------------------------------------------------------------- 1 | using Documenter, DemoCards 2 | using DIPTutorials 3 | 4 | templates, theme = cardtheme("list") 5 | tutorials, tutorials_cb = makedemos("tutorials", templates) 6 | dip_examples, dip_examples_cb = makedemos("dip", templates) 7 | 8 | format = Documenter.HTML(prettyurls = get(ENV, "CI", nothing) == "true", 9 | assets = [theme]) 10 | 11 | makedocs(format = format, 12 | modules = [DIPTutorials], 13 | sitename = "Julia 数字图像处理", 14 | pages = [ 15 | "Home" => "index.md", 16 | "JuliaImages 入门" => tutorials, 17 | "DIP 示例代码" => dip_examples, 18 | "Reference" => "reference.md" 19 | ] 20 | ) 21 | 22 | tutorials_cb() 23 | dip_examples_cb() 24 | 25 | deploydocs(repo="github.com/johnnychen94/Image-Processing-in-Julia.git") 26 | -------------------------------------------------------------------------------- /docs/src/index.md: -------------------------------------------------------------------------------- 1 | # Julia 数字图像处理 2 | 3 | ## 简介 4 | 5 | 目前国内高校数字图像处理课程主要以 [Image Processing ToolBox](https://www.mathworks.com/products/image.html) (MATLAB) 和 6 | [OpenCV](https://opencv.org/) (C++/Python) 为主。因为其语言简单、工具可靠方便,MATLAB 一直属于主流的教学语言。近年来随着 Python 7 | 及开源软件的普及和推广, 一些课程开始选择采用 Python 进行围绕 OpenCV 的教学,当然有一些计算机和电子技术专业的课程也会采用 C++ 来进行教学。 8 | 9 | 作为下一代高性能计算语言, [Julia](https://julialang.org/) 允许我们在不涉及 C 代码的情况下以更少地精力来实现更高效的代码,[JuliaImages](https://juliaimages.org/) 是基于 Julia 开发的高性能通用图像处理工具箱,其特点是: 10 | 11 | * 纯 Julia 开发,代码易读易写 12 | * 高性能:有很高的性能上限 + 达到性能上限比较容易 13 | * 比 Python 更加开放的生态环境 14 | * 支持高维矩阵处理:MRI、视频序列、三维空间 15 | 16 | 关于 Julia 的特点,可以阅读博客[Julia 1.0 正式发布](https://julialang.org/blog/2018/08/one-point-zero-zh_cn/) 以及 17 | [为什么我们要创造Julia](https://julialang.org/blog/2012/02/why-we-created-julia-zh_CN/)。 尽管 Julia 是一门高性能计算语言, 18 | 但是这并不意味着实现高性能是一件很容易的事情。实际上,如果不加以训练的话,用 Julia 写出 Python 的速度也是很有可能的。 19 | 由于这个原因,本文档有两个目的: 20 | 21 | * Julia 下数字图像处理的入门与提高 22 | * 如何实现一个高效的图像处理算法 23 | 24 | 为了达到这个目的,本文档由两部分组成: 25 | 26 | * [JuliaImages 入门](@ref tutorials_index)是一些关于 Julia 及 Julia 下图像处理的系列导论,它介绍 27 | 了 JuliaImages 的基本生态以及一些 Julia 下的编程实践,这里面的内容一部分来源于 28 | [Julia 官方文档](https://docs.julialang.org/en/v1/) 以及 [JuliaImages 官方文档](https://juliaimages.org/stable/)。 29 | 推荐按顺序阅读。 30 | * [DIP示例代码](@ref dip_index) 用 Julia 实现了[1]和[2]中涉及到的一些例子和习题,可以与教材[1]和 31 | [JuliaImages 入门](@ref tutorials_index) 配套使用。之所以选择实现[1]的原因是它比较适合数字图像处理的初学者(一二年级本科生)。 32 | 可以按照任意顺序阅读。 33 | 34 | !!! warning 35 | 🚧 目前 JuliaImages 还处于早期开发阶段,尽管已经能够满足大部分科研需求,但是还并不适合调包党来无脑使用。 36 | 37 | 尽管文档中涉及的代码都是可以运行的,但是为了加深理解,最好在阅读本文档之前先对 Julia 及其语法有一些基本的认识,以下是一些比较好的 38 | 参考材料: 39 | 40 | * [Julia 官方文档](https://docs.julialang.org/en/v1/) 属于最权威的教程及参考材料,绝大部分开发者都是通过该文档来学习 Julia 的。 41 | 其缺点是想要阅读它需要有一些其他语言的开发经验。 42 | * [JuliaBox Tutorials](https://github.com/JuliaComputing/JuliaBoxTutorials) 是 [Julia Computing](https://juliacomputing.com/) 43 | 发布的一系列入门教程, Julia 语言早期的核心开发者都任职于 Julia Computing 中。在 YouTube 上能找到配套视频教程。 44 | * [Julia 编程基础](https://github.com/hyper0x/JuliaBasics) 是目前为数不多的比较好的中文 Julia 语言入门材料。其缺点很明显: 45 | 它仅仅只是对语言本身的介绍,可以理解为 Julia 官方文档的简易版本。其优点也非常明显:适合初学者。 46 | 47 | ## 代码环境 48 | 49 | 每段代码均提供三个版本:网页版(你正在阅读的内容)、源代码以及基于nbviewer的jupyter notebook版本。如果想要在本地搭建同样的环境并执行, 50 | 只需要使用同样的 [`Project.toml`](https://github.com/johnnychen94/Image-Processing-in-Julia/blob/master/docs/Project.toml) 51 | 和 [`Manifest.toml`](https://github.com/johnnychen94/Image-Processing-in-Julia/blob/master/docs/Manifest.toml) 52 | 即可,在 linux 和 macos 的命令行下可以这样操作: 53 | 54 | ```bash 55 | # bash 56 | git clone https://github.com/johnnychen94/Image-Processing-in-Julia.git 57 | cd "Image-Processing-in-Julia" 58 | # 初始化 docs 项目 59 | julia --project=docs/ -e "using Pkg; Pkg.instantiate()" 60 | # 打开 Julia 并激活 docs 项目 61 | julia --project=docs/ 62 | ``` 63 | 64 | 下面是本文档编译时使用的版本,如果你在运行文档时遇到错误,请检查使用的 Julia 及相应工具箱版本。 65 | 66 | ```@setup version 67 | using Pkg, InteractiveUtils 68 | Pkg.activate("..") 69 | ``` 70 | 71 | ```@repl version 72 | using Pkg, Dates 73 | today() 74 | versioninfo() 75 | Pkg.status() 76 | ``` 77 | 78 | 其中 [`DemoCards`](https://github.com/johnnychen94/DemoCards.jl) 与 [`Documenter`](https://github.com/JuliaDocs/Documenter.jl) 79 | 是用来生成本文档的工具,可以不用关注。除此之外的包均需要安装,安装可以通过下述方式进行: 80 | 81 | ```julia 82 | # 安装 Images 等包 83 | (v1.4) pkg> add Images@0.22 84 | # 安装 DIPTutorials -- not registered in General 85 | (v1.4) pkg> add https://github.com/johnnychen94/Image-Processing-in-Julia 86 | ``` 87 | 88 | ## 参考文献 89 | 90 | * [1] Gonzalez, Rafael C., Richard E. Woods, and Barry R. Masters. "Digital image processing third edition." Pearson (2008). [中文版](https://item.jd.com/12191950.html) 91 | * [2] Gonzalez, Rafael C., and Richard E. Woods "Digital image processing fourth edition." Pearson (2017). 92 | -------------------------------------------------------------------------------- /docs/src/reference.md: -------------------------------------------------------------------------------- 1 | # Reference 2 | 3 | 安装工具包`DIPTutorials`: 4 | 5 | ```julia 6 | ]add https://github.com/johnnychen94/Image-Processing-in-Julia 7 | ``` 8 | 9 | ```@autodocs 10 | Modules = [DIPTutorials, DIPTutorials.DIP3e] 11 | ``` 12 | -------------------------------------------------------------------------------- /docs/tutorials/index.md: -------------------------------------------------------------------------------- 1 | # [JuliaImages 入门](@id tutorials_index) 2 | 3 | {{{democards}}} 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/DIP3e.jl: -------------------------------------------------------------------------------- 1 | module DIP3e 2 | 3 | using Printf 4 | using Pkg.Artifacts 5 | const artifacts_toml = abspath(@__DIR__, "..", "Artifacts.toml") 6 | const artifact_name = "dip3e_data" 7 | const artifacts_url_prefix = "http://www.imageprocessingplace.com/downloads_V3/dip3e_downloads/dip3e_book_images/" 8 | const artifact_lists = append!(map(idx->@sprintf("DIP3E_CH%02d_Original_Images.zip", idx), 1:12), 9 | ["DIP3E_CH08_Original_Video_Clips.zip", 10 | "DIP3E_Problem_Figures.zip"]) 11 | 12 | using ZipFile 13 | 14 | function get_artifact_dirpath(ch_idx::Integer) 15 | artifact_name = @sprintf "DIP3E_CH%02d" ch_idx 16 | file_hash = artifact_hash(artifact_name, artifacts_toml) 17 | if isnothing(file_hash) || !artifact_exists(file_hash) 18 | new_hash = create_artifact() do artifact_dir 19 | zip_filename = artifact_name * "_Original_Images.zip" 20 | @info "downloading and unzipping dataset $(zip_filename)" 21 | src_url = joinpath(artifacts_url_prefix, zip_filename) 22 | download_path = joinpath(artifact_dir, zip_filename) 23 | download(src_url, download_path) 24 | isfile(download_path) || error("failed to download $(download_path), please try it again.") 25 | r = ZipFile.Reader(download_path) 26 | for f in r.files 27 | fname = basename(f.name) 28 | isempty(fname) && continue 29 | write(joinpath(artifact_dir, basename(f.name)), read(f)) 30 | end 31 | close(r) 32 | rm(download_path) 33 | end 34 | if isnothing(file_hash) 35 | bind_artifact!(artifacts_toml, artifact_name, new_hash, lazy=true) 36 | end 37 | file_hash = new_hash 38 | end 39 | return joinpath(artifact_path(file_hash)) 40 | end 41 | 42 | """ 43 | get_filepath(img_name) 44 | 45 | Return the path to the image file with `img_name` in its name. 46 | 47 | # Examples 48 | 49 | ```julia 50 | using DIPTutorials 51 | DIP3e.get_filepath("0101") # figure 1.1 52 | ``` 53 | 54 | See also: [`DIP3e.list_filenames`](@ref) 55 | """ 56 | function get_filepath(img_name::AbstractString) 57 | m = match(r"(\d+)", img_name) 58 | isnothing(m) && error("Unrecognized file name \"$(img_name)\".") 59 | ch_idx = parse(Int, m.captures[1][1:2]) 60 | files = list_filenames(ch_idx; abspath=true) 61 | 62 | idx = findfirst(x->occursin(img_name, x), files) 63 | if isnothing(idx) 64 | error("image with \"$(img_name)\" in its name does not exist, please check possible filename with `DIP3e.list_filenames($(ch_idx))` ") 65 | end 66 | return files[idx] 67 | end 68 | 69 | """ 70 | list_filenames(idx::Integer; abspath=false) 71 | 72 | Return a list of filenames available in chapter `idx`. 73 | 74 | If `abspath` is `true`, then each item is a path that you can directly load. 75 | 76 | # Examples 77 | 78 | ```julia 79 | using DIPTutorials 80 | DIP3e.list_filenames(1) # all figures in chapter 1 81 | ``` 82 | 83 | See also: [`DIP3e.get_filepath`](@ref) 84 | """ 85 | function list_filenames(ch_idx::Integer; abspath=false) 86 | root = get_artifact_dirpath(ch_idx) 87 | files = filter(x->endswith(lowercase(x), "tif"), readdir(root)) 88 | return abspath ? joinpath.(root, files) : files 89 | end 90 | 91 | end 92 | 93 | -------------------------------------------------------------------------------- /src/DIPTutorials.jl: -------------------------------------------------------------------------------- 1 | module DIPTutorials 2 | 3 | export DIP3e 4 | 5 | include("DIP3e.jl") 6 | using .DIP3e 7 | 8 | """ 9 | A helper package for DIP tutorials: https://johnnychen94.github.io/Image-Processing-in-Julia/dev/ 10 | 11 | # Examples 12 | 13 | ```julia 14 | using DIPTutorials, FileIO 15 | imgfile = DIP3e.get_filepath("0101") # figure 1.1 16 | img = load(imgfile) 17 | ``` 18 | """ 19 | DIPTutorials 20 | 21 | end 22 | --------------------------------------------------------------------------------