Compare commits

...

619 Commits

Author SHA1 Message Date
Jim Martens 82e2f7cf23 Added _minted* to gitignore 2022-10-10 20:19:31 +02:00
Jim Martens 712f533fd6 Added talk Werkstudent \* Informatik 2022-10-10 19:32:57 +02:00
Jim Martens c23232433c Added Java in geil 2022-10-10 19:15:07 +02:00
Jim Martens 1f29176d96 Added talk Gems of Production code 2022-10-10 18:05:06 +02:00
Jim Martens c0e9e7a8f1 Updated KeepassXC presentation 2021-10-04 19:54:57 +02:00
Jim Martens 4095317542 Renamed keepassX to keepassXC 2020-10-21 20:55:34 +02:00
Jim Martens 6fe8f723d1 Added tex version of cold war history protocol
Signed-off-by: Jim Martens <github@2martens.de>
2019-07-06 19:40:31 +02:00
Jim Martens 78e436a1f6 Added raw version of history protocol
Signed-off-by: Jim Martens <github@2martens.de>
2019-07-06 19:40:07 +02:00
Jim Martens 3d96b72e45 Updated bib files with JabRef 4.3
Signed-off-by: Jim Martens <github@2martens.de>
2018-12-08 14:38:57 +01:00
Jim Martens 77ab45e500 [Geschichte] Essay zu Mönchskonflikten erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2018-12-01 16:08:01 +01:00
Jim Martens 86948292be [Logik] Übungsblatt hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2018-12-01 14:11:44 +01:00
Jim Martens 4e89df3b13 Added protocol for 19th November
Signed-off-by: Jim Martens <github@2martens.de>
2018-11-21 11:21:16 +01:00
Jim Martens fcbfee193c [NN] Added image files
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-17 10:35:38 +02:00
Jim Martens df87f13e31 [NN] Added images to presentation
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-17 10:34:25 +02:00
Jim Martens 14c212b912 [Masterproj] Improved seminar report with suggestions from reviews
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-14 16:01:26 +02:00
Jim Martens 66544023b2 [Masterproj] Added sample neural network drawn with tikz
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-14 16:00:15 +02:00
Jim Martens 82998eb0ae [Masterproj] Fixed capitalization of references
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-14 15:59:32 +02:00
Jim Martens 52d9058f01 [Geschichte] Titel von Sitzungsprotokoll zur Osteuropa-VL angepasst
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-13 13:23:24 +02:00
Jim Martens 3faaa73c34 [Geschichte] Sitzungsprotokoll zur Mittelmeer VL erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-13 13:07:08 +02:00
Jim Martens a0c415b976 [Geschichte] Fixed typo
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-13 13:06:57 +02:00
Jim Martens 0359b918be [Geschichte] Sitzungsprotokoll für Osteuropa-VL verfasst
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-13 11:32:14 +02:00
Jim Martens 6e80842da4 [NN] Created presentation slides for NN
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-11 13:06:56 +02:00
Jim Martens 039bad57d0 [NN] Fixed typo
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-11 12:50:56 +02:00
Jim Martens 1d52695180 Updated the date
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-09 09:55:18 +02:00
Jim Martens 1c3bdb9c81 [Masterproj] Fixed some typos and the date
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-05 13:46:15 +02:00
Jim Martens 6a5433ae7f [Masterproj] Added conclusion
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-04 13:35:25 +02:00
Jim Martens ec6f2853f5 [Masterproj] Split references across multiple slides
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-04 13:33:10 +02:00
Jim Martens cce325a52d [Masterproj] Added first version of presentation
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-04 13:30:52 +02:00
Jim Martens 885d240803 [Masterproj] Added missing word
Signed-off-by: Jim Martens <github@2martens.de>
2018-07-04 13:30:42 +02:00
Jim Martens f5523d540c [NN] Improved conclusion
Signed-off-by: Jim Martens <github@2martens.de>
2018-06-27 12:28:59 +02:00
Jim Martens c98f0e1bbf [NN] Added equation references
Signed-off-by: Jim Martens <github@2martens.de>
2018-06-20 12:25:29 +02:00
Jim Martens a51681103a [NN] Improved wording and formatting
Signed-off-by: Jim Martens <github@2martens.de>
2018-06-20 10:51:08 +02:00
Jim Martens 5b32039b09 [Masterproj] Polished paper review
Signed-off-by: Jim Martens <github@2martens.de>
2018-06-12 13:57:20 +02:00
Jim Martens e7823fc5b3 [Masterproj] Added abstract to seminar paper
Signed-off-by: Jim Martens <github@2martens.de>
2018-06-05 12:27:32 +02:00
Jim Martens c4f088bc6f [Geschichte] Protokoll von Mittelmeer-VL erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2018-06-05 11:11:47 +02:00
Jim Martens b329548d6b [Masterproj] Added introduction
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-30 12:12:35 +02:00
Jim Martens 1d8e4fd062 [NN] Changed title of paper
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-24 13:15:38 +02:00
Jim Martens 13245b802f [NN] Improved reading flow
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-24 13:07:54 +02:00
Jim Martens 13aac2fac3 [NN] Updated abstract
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-24 12:54:02 +02:00
Jim Martens 5c942b3178 [NN] Added actual comparison between methods
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-24 12:48:08 +02:00
Jim Martens 564479a094 [NN] Added info about Hebbian learning to localized learning section
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-24 11:48:26 +02:00
Jim Martens 4a474d0625 [NN] Added explanation for second environmental feedback loop in each example
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-24 11:21:09 +02:00
Jim Martens 1578ef4577 [NN] Added formulas to ease understanding
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-24 11:11:35 +02:00
Jim Martens f42ffae7f5 [NN] Added short descriptions of the work of Shmelkov, Velez and Kirkpatrick
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-23 15:43:46 +02:00
Jim Martens 8698da1277 [NN] Removed readers guide
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-23 15:36:37 +02:00
Jim Martens 78202a2505 [NN] Fixed typos
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-23 15:36:15 +02:00
Jim Martens f230359e25 [Masterproj] Added discussion and conclusion
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-23 12:37:27 +02:00
Jim Martens 84974326f6 [Masterproj] Unified bibliographic references
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-22 14:15:25 +02:00
Jim Martens d4de03f9d6 [Masterproj] Added section about experiments
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-22 14:08:40 +02:00
Jim Martens d062527354 [NN] Finished paper draft
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-15 13:12:11 +02:00
Jim Martens 1bcdb8d937 [NN] Explained approaches
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-10 14:54:47 +02:00
Jim Martens 9325badbe3 [NN+Masterproj] Made sure quotes are correctly rendered
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-09 15:26:07 +02:00
Jim Martens 862d69909d [Masterproj] Added bibtex file
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-09 15:22:49 +02:00
Jim Martens 594910dfb2 [NN] Added bibtex file
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-09 15:22:23 +02:00
Jim Martens 3bc1213359 [NN] Finished catastrophic forgetting section for seminar paper
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-09 15:21:50 +02:00
Jim Martens 87548970fb [NN] Renamed example seminar paper
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-09 11:50:14 +02:00
Jim Martens 58307b4e80 [MasterProj] Added method description in seminar report
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-08 13:09:25 +02:00
Jim Martens 779ffa97ec [Geschichte] Sitzungsprotokoll-Mitschrift vom 7. Mai 2018 erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2018-05-07 22:03:48 +02:00
Jim Martens 36723fffa9 [NN] Finished outline
Signed-off-by: Jim Martens <github@2martens.de>
2018-04-25 12:27:02 +02:00
Jim Martens 8600267879 [Projekt] Added test file
Signed-off-by: Jim Martens <github@2martens.de>
2018-04-23 12:54:28 +02:00
Jim Martens e30c4aad5f [CCV] Added result files for methods in sheet7
Signed-off-by: Jim Martens <github@2martens.de>
2018-04-23 12:53:16 +02:00
Jim Martens feac86e2cd [CCV] Added eval file
Signed-off-by: Jim Martens <github@2martens.de>
2018-04-23 12:51:18 +02:00
Jim Martens cb2ecf783d [CCV] Added results files
Signed-off-by: Jim Martens <github@2martens.de>
2018-04-23 12:50:10 +02:00
Jim Martens 52d99c45c3 Added bmp files to gitignore
Signed-off-by: Jim Martens <github@2martens.de>
2018-04-23 12:49:32 +02:00
Jim Martens e6d944d4f6 Added JPG, env and ENV to gitignore
Signed-off-by: Jim Martens <github@2martens.de>
2018-04-23 12:47:14 +02:00
Jim Martens c1995d038a [CCV] Added poster files
Signed-off-by: Jim Martens <github@2martens.de>
2018-04-23 12:46:53 +02:00
Jim Martens 5cafec412d [NN] Added template for seminar paper
Signed-off-by: Jim Martens <github@2martens.de>
2018-04-23 12:44:04 +02:00
Jim Martens b163a10a51 [MProj] Added seminar report skeleton
Signed-off-by: Jim Martens <github@2martens.de>
2018-04-23 12:43:19 +02:00
Jim Martens efee7ab54e Finished first draft of outline
Signed-off-by: Jim Martens <github@2martens.de>
2018-04-20 14:23:44 +02:00
Jim Martens 597f6d508f [NN] Added outline
Signed-off-by: Jim Martens <github@2martens.de>
2018-04-20 11:53:00 +02:00
Jim Martens 9dab8c434a [Geschichte] Protokoll vom 9.11.17 ausformuliert
Signed-off-by: Jim Martens <github@2martens.de>
2017-11-13 15:07:15 +01:00
Jim Martens cd9b808fa3 [Sonstiges] Updated ue4sim presentation with paper slide
Signed-off-by: Jim Martens <github@2martens.de>
2017-11-09 16:15:07 +01:00
Jim Martens ba9f5eb3d6 [Geschichte] Sitzungsprotokoll vom 9.11.17 erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2017-11-09 11:28:30 +01:00
Jim Martens 522fd4a7ee [Sonstiges] Added ue4sim presentation as part of project
Signed-off-by: Jim Martens <github@2martens.de>
2017-11-08 15:24:39 +01:00
Jim Martens 409780bb0e [Sonstiges] Converted presentations to PDF 1.4
Signed-off-by: Jim Martens <github@2martens.de>
2017-10-10 15:15:24 +02:00
Jim Martens db17071bc8 [Sonstiges] Included xkcd image in diceware slides
Signed-off-by: Jim Martens <github@2martens.de>
2017-10-10 11:13:21 +02:00
Jim Martens fdc13854a0 [Sonstiges] Added presentation about KeePassX
Signed-off-by: Jim Martens <github@2martens.de>
2017-10-09 10:00:02 +02:00
Jim Martens c20f13cb65 [Sonstiges] Added presentation about Diceware
Signed-off-by: Jim Martens <github@2martens.de>
2017-10-09 09:59:46 +02:00
Jim Martens a733ac9bd2 [Sonstiges] Added call to election
Signed-off-by: Jim Martens <github@2martens.de>
2017-10-08 10:16:57 +02:00
Jim Martens 8165612d74 [Sonstiges] Added presentation "Deutschland nach der Wahl"
Signed-off-by: Jim Martens <github@2martens.de>
2017-10-07 15:58:18 +02:00
Jim Martens 14c8b65502 [Sonstiges] Präsentation des Werdegangs erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2017-09-29 10:04:50 +02:00
Jim Martens 993376f967 [CCV] Changed center-surround ratio to 3:13
Signed-off-by: Jim Martens <github@2martens.de>
2017-06-06 11:33:50 +02:00
Jim Martens 77ed2f8e7b [CCV] Added normalization before saving saliency map
The additional normalization stretches the saliency
map to 255 as highest value to make salient regions
more visible. In addition mean fusion is used to
create the saliency map.

Signed-off-by: Jim Martens <github@2martens.de>
2017-06-05 12:25:26 +02:00
Jim Martens 370e17a319 [CCV] Deactivated orientation for batch processing
Signed-off-by: Jim Martens <github@2martens.de>
2017-06-05 12:24:02 +02:00
Jim Martens 1216dbd5db [CCV] Added batch script for saliency system
Signed-off-by: Jim Martens <github@2martens.de>
2017-06-05 11:39:53 +02:00
Jim Martens 1ffc7f0241 [CCV] Finished main function
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 21:23:52 +02:00
Jim Martens 8e418a912e [CCV] Changed fusion method to mean for LAB pyramids
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 21:06:45 +02:00
Jim Martens fcb47f3828 [CCV] Removed hardcoded gabor parameters
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 20:59:32 +02:00
Jim Martens 5deeb1a46e [CCV] Prevented unintended side effects
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 20:53:41 +02:00
Jim Martens 781edeb133 [CCV] Changed signature of get feature map method
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 20:51:45 +02:00
Jim Martens feae7ddeaf [CCV] Prevented unintended changes
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 20:51:11 +02:00
Jim Martens c57a5fa468 [CCV] Removed obsolete variable
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 19:28:05 +02:00
Jim Martens 62ebc48997 [CCV] Removed obsolete fusion functions
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 19:27:20 +02:00
Jim Martens 958b0b748c [CCV] Fixed mean fusion function
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 19:26:45 +02:00
Jim Martens e196aea379 [CCV] Fixed visualization of DOG
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 19:18:12 +02:00
Jim Martens d73e52de94 [CCV] Made visualize_gaussian_pyramids static
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 19:11:20 +02:00
Jim Martens 5b1167366d [CCV] Optimized gauss_pyramid constructor
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 18:57:59 +02:00
Jim Martens b379fdd3be [CCV] Added method to visualize gaussian pyramids
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 18:07:14 +02:00
Jim Martens 712246b72a [CCV] Added orientation channel to system
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 17:32:17 +02:00
Jim Martens e2a6798472 [CCV] Added oriented and laplacian pyramid to CMake
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 17:30:24 +02:00
Jim Martens 447567a870 [CCV] Added oriented and laplacian pyramid
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 17:29:48 +02:00
Jim Martens 9dbe8ce79c [CCV] Switched lab pyramid to generic fusion functions
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 17:22:55 +02:00
Jim Martens 8899b8403a [CCV] Added generic mean and max fusion functions
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 17:17:12 +02:00
Jim Martens 9d5d57b1c5 [CCV] Added missing semicolon
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 16:19:29 +02:00
Jim Martens ae24a8e256 [CCV] Implemented first version of saliency system
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-30 16:13:25 +02:00
Jim Martens 63e58af14a [CCV] Added eval script
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-23 15:43:47 +02:00
Jim Martens 9d92c7e11c [Geschichte] Sitzungsprotokoll vom 17.5. ausformuliert
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-21 14:39:14 +02:00
Jim Martens c8b869d217 [Geschichte] Rohfassung des Protokolls von Lateinamerika verfasst
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-17 11:45:33 +02:00
Jim Martens 2932d433ff [CCV] Finished exercise 6
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-16 15:42:29 +02:00
Jim Martens 449d9aee3e [Geschichte] Protokoll vom 11. Mai zu Rom ausformuliert
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-14 14:03:58 +02:00
Jim Martens 8eb48b9b0a [CVV] Added orientation pyramid
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-12 16:11:31 +02:00
Jim Martens 59aef6a424 [CVV] Added missing " in header file
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-12 15:59:58 +02:00
Jim Martens c5c9d2d95c [CVV] Added ability to get layers of laplacian pyramid
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-12 15:17:06 +02:00
Jim Martens 6bcf879da7 [CVV] Fixed laplacian pyramid
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-12 15:11:09 +02:00
Jim Martens 375b6bd463 [CVV] Added const versions of gauss_pyramid methods
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-12 15:02:55 +02:00
Jim Martens 61f25e3739 [Geschichte] Protokoll von Geschichte 1. WK ausformuliert
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-11 12:03:38 +02:00
Jim Martens 9e57bac492 [Geschichte] Protokoll vom Rom VL verfasst
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-11 09:47:03 +02:00
Jim Martens c196e17ed6 [CVV] Added laplacian pyramid
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-09 15:50:39 +02:00
Jim Martens b9d9ae72d7 [CVV] Added gaussian pyramid class from prev sheet
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-09 15:37:46 +02:00
Jim Martens b4e892ca2c [CVV] Finished part one of CCV sheet 5
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-09 15:33:14 +02:00
Jim Martens c7f86522ed [Sonstiges] Überschrift korrigiert
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-08 18:14:35 +02:00
Jim Martens b0f29c188f [Sonstiges] Präsentation für AK Schule Wirtschaft erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-08 17:07:12 +02:00
Jim Martens 69580a86d3 [FGI3] Finished paper
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-08 15:57:22 +02:00
Jim Martens a1969b145e [Geschichte] Protokoll von 1. WK VL verfasst
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-08 15:43:55 +02:00
Jim Martens 1410e1f560 [CCV] Prevented unintended modifications of matrices
Signed-off-by: Jim Martens <github@2martens>
2017-05-07 16:40:47 +02:00
Jim Martens d20a86dc97 [CCV] Fixed colour conversion
Signed-off-by: Jim Martens <github@2martens>
2017-05-07 16:27:57 +02:00
Jim Martens 857d7450b7 [CCV] Fixed compile issue
Signed-off-by: Jim Martens <github@2martens>
2017-05-07 16:17:18 +02:00
Jim Martens 8760b1924c [CCV] Included feature maps in main program
Signed-off-by: Jim Martens <github@2martens>
2017-05-07 16:14:19 +02:00
Jim Martens 3147bcce8b [CCV] Added ability to visualize feature maps
Signed-off-by: Jim Martens <github@2martens>
2017-05-07 16:13:54 +02:00
Jim Martens 79f615c454 [CCV] Restructured lab_pyramid header
Signed-off-by: Jim Martens <github@2martens>
2017-05-07 16:10:25 +02:00
Jim Martens ee5b0cabd0 [CCV] Added ability to compute feature maps
Signed-off-by: Jim Martens <github@2martens>
2017-05-07 16:08:50 +02:00
Jim Martens 3003bf5338 [CCV] Added across scale addition method
Signed-off-by: Jim Martens <github@2martens>
2017-05-07 15:49:07 +02:00
Jim Martens 57eaab1aa0 [CCV] Fixed typo
Signed-off-by: Jim Martens <github@2martens>
2017-05-04 13:20:14 +02:00
Jim Martens 2e714037fb [CCV] Increased sigma values
Signed-off-by: Jim Martens <github@2martens>
2017-05-04 13:17:17 +02:00
Jim Martens a98fc12db2 [CCV] Fixed overwriting of matrices
Signed-off-by: Jim Martens <github@2martens>
2017-05-04 13:16:59 +02:00
Jim Martens 72a06519ac [CCV] Fixed typo
Signed-off-by: Jim Martens <github@2martens>
2017-05-04 12:57:07 +02:00
Jim Martens 056bbb85fc [CCV] DoG is now computed and visualized
Signed-off-by: Jim Martens <github@2martens>
2017-05-02 15:55:11 +02:00
Jim Martens b8eb2c108f [CCV] Fixed compile issues
Signed-off-by: Jim Martens <github@2martens>
2017-05-02 15:54:31 +02:00
Jim Martens 6e983d8e8d [CCV] Added ability to visualize DoG
Signed-off-by: Jim Martens <github@2martens>
2017-05-02 15:42:10 +02:00
Jim Martens 174f08b711 [CCV] Added ability to compute the DoG
Signed-off-by: Jim Martens <github@2martens>
2017-05-02 15:36:13 +02:00
Jim Martens 5d78f00735 [CCV] Added ability to fetch number of layers
Signed-off-by: Jim Martens <github@2martens>
2017-05-02 15:17:42 +02:00
Jim Martens 47883edea3 [CCV] Modified LAB pyramid to work with given image
Signed-off-by: Jim Martens <github@2martens>
2017-05-02 15:11:23 +02:00
Jim Martens 2e157035c6 [CCV] Created skeleton for exercise 4
Signed-off-by: Jim Martens <github@2martens>
2017-05-02 14:53:07 +02:00
Jim Martens 100b0d2375 [CCV] The filtered images are now saved
Signed-off-by: Jim Martens <github@2martens.de>
2017-05-02 14:44:06 +02:00
Jim Martens 404f650cc6 Changed constructor to prevent IDE error
Signed-off-by: Jim Martens<github@2martens.de>
2017-04-28 15:23:08 +02:00
Jim Martens 65e01e1008 Finished exercise 4 on sheet3
Signed-off-by: Jim Martens <github@2martens.de>
2017-04-28 15:19:10 +02:00
Jim Martens 376aa0997c [Sheet3] Finished exercises 1 through 3
Signed-off-by: Jim Martens <github@2martens.de>
2017-04-25 15:56:41 +02:00
Jim Martens cc1084ec77 [CCV] Finished sheet2
Signed-off-by: Jim Martens <github@2martens.de>
2017-04-11 15:03:23 +02:00
Jim Martens 27b11b6a01 [CCV] Finished load, modify and save source file
Signed-off-by: Jim Martens <github@2martens.de>
2017-04-07 14:12:18 +02:00
Jim Martens 22d20c4edb [CCV] Renamed opencv.cpp to displayImage.cpp
Signed-off-by: Jim Martens <github@2martens.de>
2017-04-07 13:53:41 +02:00
Jim Martens 7d96034c3d [CCV] Added missing CMake options to include opencv
Signed-off-by: Jim Martens <github@2martens.de>
2017-04-04 16:20:48 +02:00
Jim Martens 26da1ee971 [CCV] Removed dynamic allocation of memory
Signed-off-by: Jim Martens <github@2martens.de>
2017-04-04 15:51:03 +02:00
Jim Martens ca157ad091 [CCV] Created subdirectories
Signed-off-by: Jim Martens <github@2martens.de>
2017-04-04 15:37:25 +02:00
Jim Martens e26a936bc1 [CCV] Finished exercise 2
Signed-off-by: Jim Martens <github@2martens.de>
2017-04-04 15:26:53 +02:00
Jim Martens 5123ae2bd3 [CCV] Added three test programs for CCV exercise 1
Signed-off-by: Jim Martens <github@2martens.de>
2017-04-04 15:00:42 +02:00
Jim Martens dd93abbfd2 Prepared gitignore for cmake usage
Signed-off-by: Jim Martens <github@2martens.de>
2017-04-04 15:00:18 +02:00
Jim Martens d1aa5818fc Präsentation für Schwerpunktthema StuPa erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2017-03-03 01:42:38 +01:00
Jim Martens 863a824662 [BV] Added summary of exercise 1 of assignment 11
Signed-off-by: Jim Martens <github@2martens.de>
2017-01-28 16:32:01 +01:00
Jim Martens 306184cf12 [FGI3] Protokoll-Sektion fertig und Beweis-Sektion begonnen
Signed-off-by: Jim Martens <github@2martens.de>
2017-01-28 16:31:22 +01:00
Jim Martens 7291476e9f [FGI3] Dateiverweis in Bibtex-Datei auf bessere Version geändert
Signed-off-by: Jim Martens <github@2martens.de>
2017-01-28 16:31:22 +01:00
Jim Martens 33f9733bf7 [BV] Added presence notes for assignment 12
Signed-off-by: Jim Martens <github@2martens.de>
2017-01-27 13:14:35 +01:00
Jim Martens fb4a0258e8 [BV] Added presence code from class nr 11
Signed-off-by: Jim Martens <github@2martens.de>
2017-01-20 13:03:21 +01:00
Jim Martens 92fb1816c7 [Geschichte] Typo korrigiert
Signed-off-by: Jim Martens <github@2martens.de>
2017-01-10 22:39:44 +01:00
Jim Martens 30eb03f5ab [StuPa] StuPa-Vorbesprechungen von CG hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2017-01-07 14:38:55 +01:00
Jim Martens 13783b851d [Sonstiges] Analyse für Informatikvorstellung hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2017-01-07 14:38:24 +01:00
Jim Martens 29ddaea882 [FGI3] Einleitung der Ausarbeitung geschrieben
Signed-off-by: Jim Martens <github@2martens.de>
2017-01-07 14:37:45 +01:00
Jim Martens 448cdda1c0 [FGI3] Renamed template
Signed-off-by: Jim Martens <github@2martens.de>
2017-01-07 11:49:23 +01:00
Jim Martens 06fc7e2b98 [FGI3] Added template for seminar paper
Signed-off-by: Jim Martens <github@2martens.de>
2017-01-07 11:49:23 +01:00
Jim Martens 5a8a67f760 [BV] Added images necessary for assignment 10
Signed-off-by: Jim Martens <github@2martens.de>
2017-01-02 14:27:41 +01:00
Jim Martens ff85cf1b36 [BV] Added assignment 10 exercise 1
Signed-off-by: Jim Martens <github@2martens.de>
2017-01-02 14:27:41 +01:00
Jim Martens 7f2c67a92b [FGI3] Präsentation fertiggestellt
Signed-off-by: Jim Martens <github@2martens.de>
2016-12-31 14:26:02 +01:00
Jim Martens df439e8419 [FGI3] Präsentation größtenteils fertig
Signed-off-by: Jim Martens <github@2martens.de>
2016-12-25 17:18:52 +01:00
Jim Martens 61da0c0f04 [FGI3] FGI3-Präsentation bis zu Notation erweitert
Signed-off-by: Jim Martens <github@2martens.de>
2016-12-22 22:17:40 +01:00
Jim Martens 49249bf02f [BV] Finished exercises 1 through 4 on assignment 9
Signed-off-by: Jim Martens <github@2martens.de>
2016-12-20 11:40:47 +01:00
Jim Martens 06d4b4ea2f [BV] Fixed exercise 1 of assignment 8
Signed-off-by: Jim Martens <github@2martens.de>
2016-12-12 10:28:22 +01:00
Jim Martens 9de692ff7d [BV] Finished assignment 8
Signed-off-by: Jim Martens <github@2martens.de>
2016-12-10 18:08:23 +01:00
Jim Martens 3fb349ff65 [BV] Mitschrift von 8. Übung erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2016-12-09 13:37:13 +01:00
Jim Martens 63649fbd4b [Geschichte] Text zu Denkmal fertiggestellt
Signed-off-by: Jim Martens <github@2martens.de>
2016-12-07 16:28:31 +01:00
Jim Martens 36357ae768 Merge branch 'master' of github.com:frmwrk123/uni 2016-12-06 12:45:59 +01:00
Jim Martens afe2b67d06 [BV] Finished assignment 7
Signed-off-by: Jim Martens <github@2martens.de>
2016-12-06 12:41:24 +01:00
Jim Martens 4d736165aa [Geschichte] Added first draft for Allendeplatz 1 building write up
Signed-off-by: Jim Martens <github@2martens.de>
2016-12-03 14:43:47 +01:00
Jim Martens 7de7d50cb5 [FGI3] Added first draft of presentation for FGI3 seminar
Signed-off-by: Jim Martens <github@2martens.de>
2016-12-03 12:40:57 +01:00
Jim Martens a1323f0118 [BV] Added assignment 7
Signed-off-by: Jim Martens <github@2martens.de>
2016-12-02 13:37:44 +01:00
Jim Martens 6f0e65c3b1 [BV] Added presence code from week 7
Signed-off-by: Jim Martens <github@2martens.de>
2016-12-02 13:13:33 +01:00
Jim Martens 4f910a089d [BV] Corrected assignment 6
Signed-off-by: Jim Martens <github@2martens.de>
2016-12-02 12:42:29 +01:00
Jim Martens ae874662f5 [BV] Übung 6 fertiggestellt
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-29 10:48:51 +01:00
Jim Martens 1e4ae5c9d3 [BV] Mitschrift von Übung 6 erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-25 13:19:02 +01:00
Jim Martens cd75e95ff3 [BV] Aufgabe 4 von Blatt 5 fertiggestellt
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-22 13:19:28 +01:00
Jim Martens f09e8cc60e [BV] Benutzung von bwlabel in Aufgabe 3 von Blatt 5
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-22 13:18:54 +01:00
Jim Martens 4265d64225 [BV] Aufgaben 1-3 fertiggestellt
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-22 11:57:54 +01:00
Jim Martens 3376771f20 [BV] Mitschrift von Übung 5 erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-18 13:51:22 +01:00
Jim Martens cfcee956bc [BV] Aufgabe 2 aktualisiert
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-16 13:56:25 +01:00
Jim Martens 0ad1201e0c [BV] Aufgabe 2 von Zettel 4 ergänzt
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-16 13:35:36 +01:00
Jim Martens 9fe8e02b18 [BV] Fingerprint-Image added
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-15 11:56:12 +01:00
Jim Martens d19acd31ae [BV] Aufgabe 3 der 4. Übung fertiggestellt
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-15 11:56:12 +01:00
Jim Martens 70a7fb780e [Geschichte] Fließtextprotokoll der Rom-VL hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-12 20:46:08 +01:00
Jim Martens da8e82c9ca [Geschichte] Infos im Protokoll ergänzt
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-12 14:10:10 +01:00
Jim Martens dc92850c46 [FGI3] Bibtex-Datei für das Seminar hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-12 14:10:10 +01:00
Jim Martens fdba6da5f7 [BV] Übung 3 Bearbeitung hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-04 13:35:36 +01:00
Jim Martens e2912f00b4 [BV] Uebung2 hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-03 08:28:25 +01:00
Jim Martens 832e94c5e7 [Geschichte] Sitzungsprotokolle hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-03 08:27:37 +01:00
Jim Martens 10a9e654ab [BV] Added variance function
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-01 15:05:21 +01:00
Jim Martens de4654c1d7 [BV] Assignment2 3-5 finished
Signed-off-by: Jim Martens <github@2martens.de>
2016-11-01 14:24:07 +01:00
Jim Martens 4ecdd157fa [BV] Added solution to first assignment
Signed-off-by: Jim Martens <github@2martens.de>
2016-10-25 12:56:17 +02:00
Jim Martens c000b0747a [KBS] Lightning-Talk für RPO erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2016-10-09 17:13:07 +02:00
Jim Martens aa4edc1ff4 [OE] Skript für 2016 hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2016-10-03 13:54:03 +02:00
Jim Martens dbfd434077 [Sonstiges] "Informatik an Uni"-Präsentation verbessert
Signed-off-by: Jim Martens <github@2martens.de>
2016-09-23 10:14:38 +02:00
Jim Martens c19ce8c510 [Sonstiges] Atom zur KBS-Themenliste hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2016-09-23 10:12:08 +02:00
Jim Martens 858eac02de [Sonstiges] Präsentation für 90min erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2016-09-23 10:11:08 +02:00
Jim Martens a4b165a100 [Geschichte] Datum für USA-Protokoll korrigiert
Signed-off-by: Jim Martens <github@2martens.de>
2016-06-18 10:12:08 +02:00
Jim Martens cfff590f9a [KBS] KBS zu US-Wahlkampf fertiggestellt
Signed-off-by: Jim Martens <github@2martens.de>
2016-05-29 18:27:41 +02:00
Jim Martens 45fa82fe44 [Sonstiges] Lightning-Talk Folien für Montag erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2016-05-28 12:27:02 +02:00
Jim Martens ebfe9d58d4 [Geschichte] Sitzungsprotokoll vom 3.5. fertiggestellt
Signed-off-by: Jim Martens <github@2martens.de>
2016-05-28 12:04:12 +02:00
Jim Martens 4af9a473b1 [Geschichte] WIP: Created skeleton of tex file
Signed-off-by: Jim Martens <github@2martens.de>
2016-05-21 14:53:31 +02:00
Jim Martens 4e09063902 [Geschichte] Sitzungsprotokoll vom 12.4. getexed und für Abgabe gekürzt
Signed-off-by: Jim Martens <github@2martens.de>
2016-05-21 14:52:53 +02:00
Jim Martens 35b18d1cc4 [Global] Added fls files to gitignore
Signed-off-by: Jim Martens <github@2martens.de>
2016-05-03 13:01:19 +02:00
Jim Martens 39cb4747df [Geschichte] Protokoll vom 3. Mai hinzugefügt (USA-VL)
Signed-off-by: Jim Martens <github@2martens.de>
2016-05-03 13:00:02 +02:00
Jim Martens 521b0c0813 [Geschichte] Erste Hälfte des Sitzungsprotokolls vom April getexed
TODO:
* zweite Hälfte in TeX überführen
* massiv kürzen, um nur 3 Seiten zu füllen

Signed-off-by: Jim Martens <github@2martens.de>
2016-04-16 14:38:07 +02:00
Jim Martens d22c01ef5e [Geschichte] Sitzungsprotokoll für 12.4.16 hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2016-04-12 11:46:11 +02:00
Jim Martens 90bb5aaa8e [Sonstiges] Neuland-Bild und BA-Video hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2016-02-26 11:01:36 +01:00
Jim Martens dc5e92c1ba [Sonstiges] Info über Keynotesprecherin und Link zu Videos ergänzt
Signed-off-by: Jim Martens <github@2martens.de>
2016-02-23 09:30:47 +01:00
Jim Martens d16eec0adb [Sonstiges] Struktur optimiert und RS korrigiert
Signed-off-by: Jim Martens <github@2martens.de>
2016-02-21 11:47:35 +01:00
Jim Martens 72dcfcb237 [Global] Added mp4 to gitignore
Signed-off-by: Jim Martens <github@2martens.de>
2016-02-14 13:41:04 +01:00
Jim Martens 53a6ac2bea [ES] Zusammenfassung hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2016-02-14 13:40:44 +01:00
Jim Martens e3ffbeccd7 [Sonstiges] Added bsc inf tetris
Signed-off-by: Jim Martens <github@2martens.de>
2016-02-14 13:35:52 +01:00
Jim Martens 89882a3ba9 [Sonstiges] Talk für Informatikvorstellung hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2016-02-14 13:35:09 +01:00
Jim Martens 24cf7f7d8d [Sonstiges] Reorganized directories
Signed-off-by: Jim Martens <github@2martens.de>
2016-02-13 14:21:40 +01:00
Jim Martens 821b596793 [KBS] machen gegen verbessern ausgetauscht
Signed-off-by: Jim Martens <github@2martens.de>
2016-01-26 11:21:33 +01:00
Jim Martens ece7c7c4d4 [KBS] Added slides for KBS Lightning Talks on 2016-01-26
Signed-off-by: Jim Martens <github@2martens.de>
2016-01-24 15:42:23 +01:00
Jim Martens a57411866a [KBS] Added ebola talk and fixed date slide
Signed-off-by: Jim Martens <github@2martens.de>
2016-01-06 13:31:47 +01:00
Jim Martens e3c33a2c09 [KBS] Added consequences slide
Signed-off-by: Jim Martens <github@2martens.de>
2016-01-04 12:50:50 +01:00
Jim Martens e02e332ed7 [Sonstiges] Added missing example reveal-js files
Signed-off-by: Jim Martens <github@2martens.de>
2016-01-03 21:50:52 +01:00
Jim Martens 3f7484b6e2 [Global] Removed *.html from gitignore
Signed-off-by: Jim Martens <github@2martens.de>
2016-01-03 21:50:14 +01:00
Jim Martens 4d59de6b21 [KBS] Titel verbessert
Signed-off-by: Jim Martens <github@2martens.de>
2016-01-03 21:49:48 +01:00
Jim Martens 54dad152f3 [KBS] Datei für 32C3 Best-of Talk erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2016-01-03 21:48:10 +01:00
Jim Martens f41e68ac59 [Sonstiges] Added reveal js library
Signed-off-by: Jim Martens <github@2martens.de>
2016-01-03 18:12:28 +01:00
Jim Martens be77550b45 [KBS] Erarbeitete Themenliste hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2016-01-03 12:12:45 +01:00
Jim Martens a409826650 [KBS] Vortrag zu Vortragsthema erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2015-11-22 14:12:44 +01:00
Jim Martens 18171c561f [KBS] Lightning-Talk feriggestellt
Signed-off-by: Jim Martens <github@2martens.de>
2015-11-18 18:00:48 +01:00
Jim Martens 34d53d035b [KBS] Vortrag über Programmiersprachen hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2015-11-17 21:02:10 +01:00
Jim Martens f3bdde168d [StuPa] Template für CG-Vorbesprechung erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2015-11-03 17:42:58 +01:00
Jim Martens b25728d72b [Geschichte] Sitzungsprotokoll für Geschichte erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2015-11-03 17:40:23 +01:00
Jim Martens c96113564b [AD] Zusammenfassung für WiSe 15/16 begonnen
Signed-off-by: Jim Martens <github@2martens.de>
2015-11-03 17:39:43 +01:00
Jim Martens 541822bdb7 [IKON] IKON 1 hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2015-10-21 22:01:21 +02:00
Jim Martens 49f46890f6 [OE] Fehlende Materialien ergänzt
Signed-off-by: Jim Martens <github@2martens.de>
2015-09-30 12:13:56 +02:00
Jim Martens 1688eff911 [OE] Angaben korrigiert
* Stadtplanliste auch für MInf, IAS und Lehramt
* Musterlösungen auch für Ersties

Signed-off-by: Jim Martens <github@2martens.de>
2015-09-29 15:39:27 +02:00
Jim Martens 2bf746e271 [OE] Materialien ergänzt
Signed-off-by: Jim Martens <github@2martens.de>
2015-09-29 14:02:18 +02:00
Jim Martens fa8fca7a83 [OE] Materialien korrigiert
Signed-off-by: Jim Martens <github@2martens.de>
2015-09-28 14:45:14 +02:00
Jim Martens fdf111a857 [OE] Materialliste hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2015-09-28 14:31:08 +02:00
Jim Martens af5c2a2fe3 [OE] Skript für 2015 hinzugefpgt
Signed-off-by: Jim Martens <github@2martens.de>
2015-09-22 14:37:54 +02:00
Jim Martens 4a0f74230f [OE] Diskussionsleitfaden aktualisiert
Signed-off-by: Jim Martens <github@2martens.de>
2015-09-16 18:54:18 +02:00
Jim Martens b342cf6aa0 [OE] Diskussionsleitfaden aktualisiert
Signed-off-by: Jim Martens <github@2martens.de>
2015-09-13 16:19:17 +02:00
Jim Martens 8aa197eaf5 [Sonstiges] NC ergänzt und Wording korrigiert
Signed-off-by: Jim Martens <github@2martens.de>
2015-09-01 17:48:58 +02:00
Jim Martens af1a4997c4 [OE] Diskussionsleitfaden in Version 1 erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2015-09-01 17:48:10 +02:00
Jim Martens 66fa6aeea4 [Sonstiges] Informatikvortrag aktualisiert
* Section über Selbstverwaltung entfernt
* Bilder an einigen Stellen eingefügt
* Subsections an sinnvollen Stellen ergänzt

Signed-off-by: Jim Martens <github@2martens.de>
2015-08-28 20:56:55 +02:00
Jim Martens 2900d19f07 [Sonstiges] Erster Entwurf für Schulvortrag fertig
Signed-off-by: Jim Martens <github@2martens.de>
2015-08-27 17:57:26 +02:00
Jim Martens 2e3039c57d [OE] Added presentation template
Signed-off-by: Jim Martens <github@2martens.de>
2015-08-27 17:57:26 +02:00
Jim Martens 50cc385ae5 [OE] Selbstverwaltungs-Paper aktualisiert
Signed-off-by: Jim Martens <github@2martens.de>
2015-08-27 17:57:26 +02:00
Jim Martens 96b44a7a5b [OE] Selbstverwaltung Paper 2015 hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2015-08-27 17:57:26 +02:00
Jim Martens 6ad79811e6 [ES] Hinweis auf Raw-Version ergänzt 2015-08-14 12:18:22 +02:00
Jim Martens 6995585c70 [Global] Added .html to gitignore
Signed-off-by: Jim Martens <github@2martens.de>
2015-07-20 19:42:06 +02:00
Jim Martens 0d982526e8 [ES] Fixed syntax
Signed-off-by: Jim Martens <github@2martens.de>
2015-07-19 16:28:47 +02:00
Jim Martens bee23b321e [ES] Zusammenfassung aktualisiert
Signed-off-by: Jim Martens <github@2martens.de>
2015-07-19 16:27:27 +02:00
Jim Martens e1dca1c4df [ES] Zusammenfassung aktualisiert
Signed-off-by: Jim Martens <github@2martens.de>
2015-07-19 15:13:59 +02:00
Jim Martens 1e9f6fa518 [ES] Small improvements
Signed-off-by: Jim Martens <github@2martens.de>
2015-07-18 17:35:35 +02:00
Jim Martens e73af07e33 [ES] Zusammenfassung hinzugefügt (WIP)
Signed-off-by: Jim Martens <github@2martens.de>
2015-07-18 16:27:43 +02:00
Jim Martens b1733ead11 [ES] Finished 6.1
Signed-off-by: Jim Martens <github@2martens.de>
2015-07-07 16:28:01 +02:00
Jim Martens 19f7cfc78f [ES] Added missing functionality
Signed-óff-by: Jim Martens <github@2martens.de>
2015-07-07 12:39:03 +02:00
Jim Martens d08780bdb3 [ES] Added file close statement
Signed-óff-by: Jim Martens <github@2martens.de>
2015-07-07 11:42:33 +02:00
Jim Martens ecf84eced8 [ES] Finished 6.1 but explode functionality
Signed-óff-by: Jim Martens <github@2martens.de>
2015-07-06 18:59:35 +02:00
Jim Martens 2e1aaa41c5 [ES] Added printImage function
Signed-óff-by: Jim Martens <github@2martens.de>
2015-07-06 12:15:12 +02:00
Jim Martens 1739c2c3f2 [ES] Fixed indentation
Signed-óff-by: Jim Martens <github@2martens.de>
2015-07-04 13:19:25 +02:00
Jim Martens dc915c332e [ES] Added initialization of SD library
Signed-óff-by: Jim Martens <github@2martens.de>
2015-07-04 13:18:55 +02:00
Jim Martens c496a3af44 [ES] Added showFile function
Signed-óff-by: Jim Martens <github@2martens.de>
2015-07-04 13:11:14 +02:00
Jim Martens a3a21f3f1e [ES] Fixed typo
Signed-óff-by: Jim Martens <github@2martens.de>
2015-07-04 12:53:44 +02:00
Jim Martens eacb325b34 [ES] Added handleCommand method
Signed-óff-by: Jim Martens <github@2martens.de>
2015-07-04 12:51:58 +02:00
Jim Martens cf36412e51 [ES] Added readString method
Signed-óff-by: Jim Martens <github@2martens.de>
2015-07-04 12:29:57 +02:00
Jim Martens 1364ac3d9a [ES] Added printString method
Signed-óff-by: Jim Martens <github@2martens.de>
2015-07-04 12:08:51 +02:00
Jim Martens 54aae08ee7 [ES] Removed useless code
Signed-óff-by: Jim Martens <github@2martens.de>
2015-07-04 11:25:28 +02:00
Jim Martens 40acb61010 [ES] Updated cmake project file
Signed-óff-by: Jim Martens <github@2martens.de>
2015-07-04 11:24:47 +02:00
Jim Martens 233b7d2f67 [ES] Added cmake file
Signed-óff-by: Jim Martens <github@2martens.de>
2015-07-04 11:24:08 +02:00
Jim Martens 39a3e70c8c [ES] Blatt 6 angefangen
Signed-off-by: Jim Martens <github@2martens.de>
2015-06-30 16:02:44 +02:00
Jim Martens fa898d8e41 [ES] Aufgabe 5 fertiggestellt
Signed-off-by: Jim Martens <github@2martens.de>
2015-06-30 16:02:23 +02:00
Jim Martens 1862a1f4e8 [ES] Aufgabe 5.3 angefangen
* ob es funktioniert, werden wir noch sehen

Signed-óff-by: Jim Martens <github@2martens.de>
2015-06-29 12:15:34 +02:00
Jim Martens 7ba486b02b [ES] Aufgabe 5.2 (fertig)
* ob es funktioniert, werden wir noch sehen

Signed-óff-by: Jim Martens <github@2martens.de>
2015-06-28 15:21:35 +02:00
Jim Martens c35782ac3a [ES] Fixed indentation
Signed-óff-by: Jim Martens <github@2martens.de>
2015-06-25 11:38:10 +02:00
Jim Martens 1e4e0db3ba [ES] Finished loop function
Signed-óff-by: Jim Martens <github@2martens.de>
2015-06-25 11:37:54 +02:00
Jim Martens 76c63a504d [ES] Improved documentation and code quality
Signed-óff-by: Jim Martens <github@2martens.de>
2015-06-25 11:35:59 +02:00
Jim Martens 76eea3af12 [ES] Fixed screen buffer size
Signed-óff-by: Jim Martens <github@2martens.de>
2015-06-25 11:32:59 +02:00
Jim Martens be413ec73e [ES] Added cmake meta files
Signed-óff-by: Jim Martens <github@2martens.de>
2015-06-25 11:30:28 +02:00
Jim Martens b6089ab756 Merge branch 'master' of github.com:frmwrk123/uni 2015-06-25 11:27:48 +02:00
Jim Martens 1dc500a002 [ES] Aufgabe 5.1 angefangen
Signed-off-by: Jim Martens <github@2martens.de>
2015-06-25 11:27:07 +02:00
Jim Martens bbbf1c47ff [ES] Aufgabenblatt 4 beendet
Signed-off-by: Jim Martens <github@2martens.de>
2015-06-16 16:07:39 +02:00
Jim Martens 6c3f0d1b81 Merge branch 'master' of github.com:frmwrk123/uni
Conflicts:
	es/blatt3/uebung3-4/uebung3-4.ino
	es/blatt3/uebung3-5/uebung3-5.ino
2015-06-12 11:27:01 +02:00
Jim Martens 308773a921 [ES] Aufgabe 4.2 fertiggestellt
Signed-off-by: Jim Martens <github@2martens.de>
2015-06-09 17:11:41 +02:00
Jim Martens 8999977fc5 [ES] Blatt 3 fertiggestellt
Signed-off-by: Jim Martens <github@2martens.de>
2015-06-09 17:10:11 +02:00
Jim Martens 353c6d940d [ES] Fixed potential error with loop
Signed-óff-by: Jim Martens <github@2martens.de>
2015-06-03 19:07:46 +02:00
Jim Martens e28e272926 [ES] Fixed potential error with loop
Signed-óff-by: Jim Martens <github@2martens.de>
2015-06-03 19:07:19 +02:00
Jim Martens 04805ce189 [ES] Finished 3.5
Signed-óff-by: Jim Martens <github@2martens.de>
2015-05-29 18:51:07 +02:00
Jim Martens 05ecd361b3 [ES] Added 3.5
Signed-óff-by: Jim Martens <github@2martens.de>
2015-05-29 14:25:24 +02:00
Jim Martens 854ee68ff5 [ES] Fixed comparison
Signed-óff-by: Jim Martens <github@2martens.de>
2015-05-29 13:37:03 +02:00
Jim Martens 849b799b33 [ES] Updated cmake files
Signed-óff-by: Jim Martens <github@2martens.de>
2015-05-29 12:05:29 +02:00
Jim Martens b94faeb9b4 [ES] Added 3.4
Signed-off-by: Jim Martens <github@2martens.de>
2015-05-29 11:25:43 +02:00
Jim Martens 97f1d61d61 [ES] Added 4.1
Signed-off-by: Jim Martens <github@2martens.de>
2015-05-19 16:11:33 +02:00
Jim Martens cfc5de6692 [ES] Finished 3.2 and 3.3
Signed-off-by: Jim Martens <github@2martens.de>
2015-05-12 15:43:33 +02:00
Jim Martens e3ab682a93 [ES] Added 3.3
Signed-óff-by: Jim Martens <github@2martens.de>
2015-05-05 17:37:09 +02:00
Jim Martens 1224e51a80 [ES] Fixed wrong boundaries
Signed-óff-by: Jim Martens <github@2martens.de>
2015-05-05 17:36:50 +02:00
Jim Martens f4dac3083d [ES] Fixed variable type
Signed-óff-by: Jim Martens <github@2martens.de>
2015-05-05 17:36:16 +02:00
Jim Martens d4e405742f [ES-Blatt3] Finished 3.2
Signed-óff-by: Jim Martens <github@2martens.de>
2015-05-05 17:04:49 +02:00
Jim Martens 9e8cb803ea [ES-Blatt3] Added blatt3 sub dir
Signed-óff-by: Jim Martens <github@2martens.de>
2015-05-05 16:45:09 +02:00
Jim Martens 2a56c478ed [ES-Blatt3] Added CMakeLists file
Signed-óff-by: Jim Martens <github@2martens.de>
2015-05-05 16:44:19 +02:00
Jim Martens 990ef2f943 [ES] Added blatt3
Signed-off-by: Jim Martens <github@2martens.de>
2015-05-05 16:13:29 +02:00
Jim Martens 18f51b5090 [OE-Drucken] Moved code to repo frmwrk123/oeprint
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-30 11:45:26 +02:00
Jim Martens 5ca2295768 [OE-Drucken] Integrated file.py
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-30 11:33:33 +02:00
Jim Martens d2a7853c5d [OE-Drucken] Improved documentation and error handling
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-30 11:33:00 +02:00
Jim Martens 6b34d9edbf [OE-Drucken] Added file.py
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-30 11:24:14 +02:00
Jim Martens 33f46033b2 [OE-Drucken] Added files directory
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-30 10:48:55 +02:00
Jim Martens f58789e4df [OE-Drucken] Fixed duplicate name
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-30 10:44:14 +02:00
Jim Martens 44a445f268 [OE-Drucken] Uses sample file
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-30 10:40:43 +02:00
Jim Martens c71820910f [OE-Drucken] Added sample config file
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-30 10:40:22 +02:00
Jim Martens 0774fcd83b [OE-Drucken] Started implementation of config parser
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-30 09:45:27 +02:00
Jim Martens db1c873563 [OE-Drucken] Finished CLI
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-30 09:08:07 +02:00
Jim Martens 93d04304ca [Drucken] Added directory for software
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-29 19:43:48 +02:00
Jim Martens c73eee9dc9 [Drucken] Added part about chain builds
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-29 19:40:14 +02:00
Jim Martens a0574d0f39 [Drucken] Added concept for print software
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-29 19:23:17 +02:00
Jim Martens d1d2842417 [ES] Aufgaben 2.2 und 2.3 fertiggestellt 2015-04-28 19:04:35 +02:00
Jim Martens 800f2283d3 [ES-Blatt2] Finished preparation for 2.3
Signed-óff-by: Jim Martens <github@2martens.de>
2015-04-22 21:08:49 +02:00
Jim Martens 1c5ac1f6ca [ES-Blatt2] Added sketch for 2.3
Signed-óff-by: Jim Martens <github@2martens.de>
2015-04-22 19:33:23 +02:00
Jim Martens e25a54050a [ES-Blatt2] Generalized behaviour
Signed-óff-by: Jim Martens <github@2martens.de>
2015-04-22 19:31:53 +02:00
Jim Martens 00e8d9d908 [ES-Blatt2] Generalized button names
Signed-óff-by: Jim Martens <github@2martens.de>
2015-04-22 19:13:31 +02:00
Jim Martens 1eeabad048 [ES-Blatt2] Improved documentation
Signed-óff-by: Jim Martens <github@2martens.de>
2015-04-22 19:06:57 +02:00
Jim Martens 00038748dc [ES] Fixed type (the second)
Signed-óff-by: Jim Martens <github@2martens.de>
2015-04-22 18:54:43 +02:00
Jim Martens acfbc6cb30 [ES] Fixed type
Signed-óff-by: Jim Martens <github@2martens.de>
2015-04-22 18:39:14 +02:00
Jim Martens f3bbd38e26 [Global] Added build/ directory to gitignore
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-21 23:50:13 +02:00
Jim Martens 4086b4da40 [ES] Blatt 1 und 2 hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-21 23:49:42 +02:00
Jim Martens 7d2ccc24f3 [Projekt] Passwortdatei aktualisiert
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-09 16:32:23 +02:00
Jim Martens b1e330ae49 [Projekt] Klasse fertiggestellt
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-09 16:32:10 +02:00
Jim Martens c2c9e63ee7 [Projekt] Leere passwords.txt hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-09 16:06:20 +02:00
Jim Martens 15d5c319e7 [Projekt] Useradmin.java hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2015-04-09 16:05:32 +02:00
Jim Martens 45b051f3d7 [Sem-Frieden] Stilistische Fehler behoben
Signed-off-by: Jim Martens <github@2martens.de>
2015-03-10 21:02:08 +01:00
Jim Martens 0617966016 [KBS] Informationen über NSA Reveals ergänzt
Signed-off-by: Jim Martens <gihub@2martens.de>
2015-01-29 17:11:00 +01:00
Jim Martens 67315a4dd7 KBS: Added website to contact list
* Improved formatting with \url

Signed-off-by: Jim Martens <github@2martens.de>
2015-01-28 12:15:45 +01:00
Jim Martens f85d28fd0c KBS: StatusUpdate Talk hinzugefügt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-28 12:13:18 +01:00
Jim Martens 558ae6d4eb Sem: IKEv2 Folie verbessert
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 11:30:34 +01:00
Jim Martens 5a994d1151 Sem: Grundlagen überarbeitet
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 11:24:53 +01:00
Jim Martens 0e1241a5f8 Sem: Strukturauszeichnung verbessert
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:51:52 +01:00
Jim Martens d3c9040382 Sem: Formaiterung der Folien verbessert
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:51:37 +01:00
Jim Martens 62953a83f6 Sem: Grundlagen von VPNs konsolidiert
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:39:32 +01:00
2scholz ad595c22f0 IPsec Bild hinzugefügt 2015-01-26 10:35:58 +01:00
Jim Martens 265b1e137c Sem: Fazit und Schluss erweitert
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:31:39 +01:00
Jim Martens 04dacc49dc SemFrieden: Abschnitt zu 2. FK fertig
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:31:39 +01:00
Jim Martens 451c215652 FGI2: 13.6.3 fertig
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:31:39 +01:00
Jim Martens 9f944840e4 FGI2: 13.6.2 fertig
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:31:39 +01:00
Jim Martens ef4ffd6e59 FGI2: 13.6.1 bearbeitet
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:31:39 +01:00
Jim Martens ae79e8be67 FGI2: 13.4.3 bearbeitet
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:31:39 +01:00
Jim Martens 4c50111d3c FGI2: 13.4.2 fertig
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:31:39 +01:00
Jim Martens b138f76f03 FGI2: 13.4.2 erster Nachweis fertig
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:31:38 +01:00
Jim Martens 4962b860c6 FGI2: 13.4.1 fertig
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:31:38 +01:00
Jim Martens 8d67dc1424 FGI2: Prozessgraphen für 13.4.1 fertig
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:31:38 +01:00
Jim Martens b9d39ff502 Sem: Präsentation nun kompatibel zu Impressive
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:31:38 +01:00
Jim Martens bc1ff8a845 Sem: NSA-Folien hinzugefügt im Repository
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:31:38 +01:00
Jim Martens 20644d6d66 Sem: NSA-Enthüllungen erweitert
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:31:36 +01:00
Jim Martens aa24b4b3ff Sem: Unklarheit beseitigt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-26 10:31:36 +01:00
2scholz 8e32c42912 Ipsec-Teil hinzugefügt 2015-01-26 10:17:27 +01:00
Jim Martens 715ace01c0 Sem: Grundlagen zu VPNs fertig
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-18 13:05:19 +01:00
Jim Martens a7aa206dee SemFrieden: Hinweis auf Martens'sche Klausel ergänzt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-18 12:37:05 +01:00
Jim Martens 916955583f SemFrieden: Reminder entfernt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-18 12:35:19 +01:00
Jim Martens b269adb38e SemFrieden: Abschnitt zu Schlüsselpunkten ergänzt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-18 12:34:59 +01:00
Jim Martens d79c6f3f1c SemFrieden: Formulierung verbessert
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-18 10:56:39 +01:00
Jim Martens 05ff902c86 SemFrieden: Formatierung verbessert
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-18 10:55:33 +01:00
Jim Martens 276b269095 Sem: Grundstruktur erweitert
* Hauptabschnitte festgelegt
* Abschnitt NSA's War on Terror fertig

Signed-off-by: Jim Martens <github@2martens.de>
2015-01-17 17:44:02 +01:00
Jim Martens fada8dc495 Sem: Formatierung verbessert
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-17 16:42:42 +01:00
Jim Martens ba14ecdefa Sem: Grundgerüst der Präsentation fertig
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-17 16:40:53 +01:00
Jim Martens 0afd022358 SemFrieden: Abschnitt zu Martens'scher Klausel ergänzt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-17 16:34:06 +01:00
Jim Martens ef4ba3b016 SemFrieden: Reminder entfernt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-17 13:46:49 +01:00
Jim Martens 9c392df588 SemFrieden: Überflüssige TODO-Referenzen entfernt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-17 13:44:56 +01:00
Jim Martens 67028c75be SemFrieden: Abschnitt zur Struktur der 1. Konferenz ergänzt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-17 13:44:22 +01:00
Jim Martens 4e2d9ce6d0 SemFrieden: Autornamen ergänzt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-17 13:43:29 +01:00
Jim Martens 1d84978dd8 FGI2: Ableitungsregeln korrigiert
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-16 10:27:40 +01:00
Jim Martens 0fb0ec6ce6 FGI2: 12.4.1 bearbeitet
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-16 10:26:01 +01:00
Jim Martens cba72c0f44 FGI2: 12.4.3 fertiggestellt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-14 20:40:02 +01:00
Jim Martens ca55a5ca38 FGI2: 12.4.3 größtenteils fertig
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-14 19:20:50 +01:00
Jim Martens 0be54fdc3d FGI2: 12.3.5 gefixed
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-14 19:14:47 +01:00
Jim Martens 0bc9908a35 FGI2; 12.4.2 bearbeitet
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-14 19:09:19 +01:00
Jim Martens c86638d42c FGI2: 12.3.5 bearbeitet
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-14 18:54:39 +01:00
Jim Martens 69c5c3f7ba FGI2: 12.3.1 bis 12.3.4 bearbeitet
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-14 12:47:12 +01:00
Jim Martens b67279e45a KBS: Hinweis zu OE ergänzt|Intervall für KSPs geändert
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-12 18:18:35 +01:00
Jim Martens f23956ace6 KBS: Titel des 31C3 Summary Talks geändert
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-12 18:17:25 +01:00
Jim Martens d01059b977 Sem: Datei für Präsentation erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-12 18:16:44 +01:00
Jim Martens a3cb018ea1 SemFrieden: Oxford Manual und Vorarbeiten zur 1. Konferenz ergänzt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-11 15:24:38 +01:00
Jim Martens e672b1cd2f SemFrieden: Hinweis zum Scheitern der Brüsseler Deklaration ergänzt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-11 15:23:32 +01:00
Jim Martens 0f39a23b88 FGI2: Abschnitt 11.4 entfernt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-11 13:41:25 +01:00
Jim Martens 1ae6c1554b FGI2: 11.4 fertiggestellt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-11 12:39:49 +01:00
Jim Martens 4b6fedf376 SemFrieden; Präsentation erstellt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-09 17:25:53 +01:00
Jim Martens 347ba7e7d2 SemFrieden: Referenzen aktualisiert
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-09 17:25:29 +01:00
Jim Martens e7855b92c9 FGI2: 11.3.8 bearbeitet
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-08 17:35:35 +01:00
Jim Martens b29845a28b FGI2: 11.3.7 bearbeitet
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-08 17:15:10 +01:00
Jim Martens 329b0bd2c1 FGI2: 11.3.7 bearbeitet (draft)
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-07 17:18:44 +01:00
Jim Martens eaf96dcd07 FGI2: 11.3.5,11.3.6 bearbeitet
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-07 17:18:05 +01:00
Jim Martens a8fa204394 FGI2: Bezeichner korrigiert
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-07 17:16:52 +01:00
Jim Martens a07d508f88 FGI2: 11.3.1,11.3.2,11.3.3 erledigt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-07 14:55:16 +01:00
Jim Martens e380a10798 Sem: Quellenverweis für ASCII-Art ergänzt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-05 11:06:48 +01:00
Jim Martens 0149c6258e Sem: Zusammenfassung ergänzt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-05 11:06:20 +01:00
Jim Martens b1c17ea7ad
Sem: Hinweis über Komplexität von IPsec ergänzt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-03 13:23:17 +01:00
Jim Martens b51c9bb1c3
Sem: Überflüssiges Wort entfernt
Signed-off-by: Jim Martens <github@2martens.de>
2015-01-03 13:18:55 +01:00
Jim Martens 53d2e36b6c Sem: IPsec Teil verbessert
* ASCII-Art statt eingebundene Bilder
* Lesefluss verbessert
2015-01-02 16:27:41 +01:00
Jim Martens 5e0289224c Sem: OpenVPN abgeschlossen 2015-01-02 15:34:12 +01:00
Jim Martens 09f224a644 Sem: Mehrere Veränderungen
* IPSec zu IPsec
* Handshake-Protokoll ergänzt (erster Entwurf)
* alten OpenVPN-Text gelöscht
2015-01-01 17:14:54 +01:00
Jim Martens fd5d879d1e Sem: Konfiguration gefixt 2015-01-01 16:38:10 +01:00
Jim Martens d870c499e8 Sem: Abstract für Böhmer angefangen 2015-01-01 16:37:22 +01:00
Jim Martens 574964bae5 KBS: Talk für Lightning-Talks 3 erstellt 2015-01-01 00:49:12 +01:00
Jim Martens 908becf763 FGI2: Aufgabenblatt 10 abgeschlossen 2014-12-19 10:26:45 +01:00
Jim Martens a85b9e460c FGI2: 10.5.2 fertiggestellt 2014-12-18 19:53:11 +01:00
Jim Martens 771e5daac2 FGI2: 10.5.1 fertiggestellt 2014-12-18 19:19:46 +01:00
Jim Martens ca615c6077 FGI2: Aufgabe 10.4 fertiggestellt 2014-12-17 11:12:51 +01:00
Jim Martens 81b0af3e26 Sem: Weiteren doppelten Text entfernt 2014-12-16 20:24:19 +01:00
Jim Martens 33e6dfb464 Sem: Doppelten Text gelöscht 2014-12-16 20:19:13 +01:00
Jim Martens 8bcd142896 Merge branch 'master' of github.com:frmwrk123/uni 2014-12-16 20:16:08 +01:00
Jim Martens a9a6f4925e FGI2: Aufgabe 10.3 fertiggestellt 2014-12-16 11:46:55 +01:00
2scholz 265b21826d Merge branch 'master' of https://github.com/frmwrk123/uni 2014-12-15 11:08:12 +01:00
2scholz 5ac5bbf004 sem: Abbildungen für AH und ESP zugefügt 2014-12-15 11:07:17 +01:00
Jim Martens c2ffede185 Sem: Absatz von Vorbemerkung aufgeteilt 2014-12-15 10:51:15 +01:00
Jim Martens 1174a80fc7 Sem: Angaben zu Böhmer ergänzt 2014-12-15 10:50:53 +01:00
1eris be021dd2c5 Sem: OpenVPN weiter ausformuliert 2014-12-15 10:10:32 +01:00
Jim Martens 3fd885e356 Sem: Formatierung der Referenzen verbessert 2014-12-14 12:14:39 +01:00
2scholz 97eafc7ac0 Merge branch 'master' of https://github.com/frmwrk123/uni
Conflicts:
	sem/OpenVPN_vs_IPSec-Paper.tex
2014-12-13 23:11:40 +01:00
2scholz 9b08d5c4f8 Sem: Referenzen zu IPSec-Teil hinzugefügt 2014-12-13 23:06:21 +01:00
Jim Martens f05e76aa69 SemFrieden: Vorbemerkungen und ersten Abschnitt fertiggestellt 2014-12-13 17:41:15 +01:00
Jim Martens e300555504 SemFrieden: Auszeichnung der Referenzen verbessert 2014-12-13 17:40:50 +01:00
Jim Martens 7d3a216361 Sem: Auszeichnung der Referenzen verbessert 2014-12-13 14:52:54 +01:00
Jim Martens 11d2a6aaf7 Sem: Referenzen verbessert 2014-12-13 14:52:38 +01:00
Jim Martens 66519f3ee9 Sem: Vorbemerkung, Grundlagen und Schlussbemerkung formuliert 2014-12-13 13:18:48 +01:00
Jim Martens b3e2fbeefc FGI1: Abgaben hinzugefügt 2014-12-10 23:04:56 +01:00
Jim Martens cd9612c504 MATH1-ALA: Abgaben hinzugefügt 2014-12-10 23:04:13 +01:00
Jim Martens 9ca68cda89 MATH1-DM: DM-Abgaben hinzugefügt 2014-12-10 23:02:11 +01:00
Jim Martens 9a438bd2ec RS: RS-Bearbeitungen hinzugefügt 2014-12-10 23:00:55 +01:00
Jim Martens 7d291303dc FGI2: 9.4 fertiggestellt 2014-12-10 13:48:59 +01:00
Jim Martens f33e896731 FGI2: 9.3 fertiggestellt 2014-12-10 11:12:46 +01:00
Jim Martens 3b429bd72a Added *.exe to ,gitignore 2014-12-08 11:31:28 +01:00
Jim Martens 96747cfe8a Sem: Kommentarzeile entfernt 2014-12-08 11:02:36 +01:00
1eris abfff2e097 Sem: Formulierungen verbessert 2014-12-08 10:58:01 +01:00
Jim Martens 9b17190f59 Sem: Fehlendes Package (erneut) hinzugefügt 2014-12-08 10:53:21 +01:00
Jim Martens 09a54eaf5f Merge branch 'tmp'
Conflicts:
	sem/OpenVPN_vs_IPSec-Paper.tex
2014-12-08 10:47:31 +01:00
Jim Martens f1b68a5b89 Sem: Leerzeile eingefügt 2014-12-08 10:46:05 +01:00
Jim Martens 7789ce78b8 Sem: TODO-Kommentare hinzugefügt 2014-12-08 10:40:08 +01:00
1eris 10b8c0a4ef Merge remote-tracking branch 'origin/master' 2014-12-08 10:33:40 +01:00
1eris a4d2016ea8 VPN Fertig 1.0 2014-12-08 10:32:45 +01:00
2scholz 3e54b90722 Merge branch 'master' of https://github.com/frmwrk123/uni 2014-12-08 10:17:47 +01:00
2scholz c88e1268fd Sem: Erklärung, was ein VPN ist hinzugefügt 2014-12-08 10:17:00 +01:00
1eris 1341514bbd VPN fertig 2014-12-08 10:10:20 +01:00
Jim Martens c637f3ff5c SemFrieden: Stichpunkte zusammengetragen 2014-12-06 14:57:27 +01:00
Jim Martens 4ca7323cc6 Sem: Performancevergleich abgeschlossen 2014-12-06 14:20:40 +01:00
Jim Martens 5e9136385b FGI2: Aufgabenblatt 8 komplett bearbeitet 2014-12-05 18:56:47 +01:00
Jim Martens 8052b64f1e FGI2: Erreichbarkeitsgraph erstellt 2014-12-05 12:35:22 +01:00
Jim Martens a085895f15 Merge branch 'master' of github.com:frmwrk123/uni 2014-12-05 11:14:31 +01:00
Jim Martens 4d94cd31ed FGI2: Erreichbarkeitsgraph begonnen 2014-12-05 11:14:02 +01:00
2scholz 792aa66985 Merge branch 'master' of https://github.com/frmwrk123/uni
Conflicts:
	sem/OpenVPN_vs_IPSec-Paper.tex
2014-12-05 10:23:39 +01:00
2scholz b40d9e26e1 Sem: IKEv2 in IPSec hinzugefügt 2014-12-05 10:12:48 +01:00
Jim Martens 5e6c31df68 FGI2: 8.5.4 bearbeitet 2014-12-04 18:07:53 +01:00
Jim Martens 96c4665ea7 FGI2: 8.5.3 korrigiert und erweitert 2014-12-04 17:57:30 +01:00
Jim Martens 4bb6dad29d FGI2: Aufgabe 8.5.2 und 8.5.3 gelöst 2014-12-04 11:29:05 +01:00
Jim Martens 8d18c2e992 FGI2: 8.5.1 bearbeitet und 8.5.2-8.5.4 begonnen 2014-12-03 12:14:38 +01:00
Jim Martens a3ce6e397a FGI2: 8.3 abgeschlossen 2014-12-03 11:04:02 +01:00
Jim Martens 00861df453 FGI2: Aufgabe 8.3.1 bearbeitet 2014-12-02 11:40:08 +01:00
Jim Martens d8c558d4ab Sem: Pool entfernt 2014-12-01 16:03:06 +01:00
Jim Martens f6c3da5358 Merge branch 'master' of github.com:frmwrk123/uni 2014-12-01 10:54:09 +01:00
Jim Martens 5cf7d48ef6 Sem: Zitierung verbessert 2014-12-01 10:53:53 +01:00
1eris 9414957906 Sem: Erste Version von OpenVPN ergänzt 2014-12-01 10:52:33 +01:00
Jim Martens 7b3b7c5220 Sem: Fromatierung verbessert 2014-12-01 10:33:59 +01:00
Jim Martens 6ec43e6f8f Merge remote-tracking branch 'origin/master' 2014-12-01 10:16:13 +01:00
Jim Martens 9d6f407c3b Sem: Typo korrigiert 2014-12-01 10:14:43 +01:00
2scholz beac337db4 sem: IPSec-Abschnitt bis auf IKEv2 fertig 2014-12-01 00:38:25 +01:00
2scholz cc85a9a012 Merge branch 'master' of https://github.com/frmwrk123/uni 2014-11-29 19:18:39 +01:00
2scholz 10f32063df IPSec-Abschnitt weiter bearbeitet, vor allem AH 2014-11-29 19:17:10 +01:00
Jim Martens 720abb96fc Merge remote-tracking branch 'origin/master' 2014-11-29 16:03:00 +01:00
Jim Martens cc0bfca22b SemFrieden: Formatierung verbessert 2014-11-29 16:02:28 +01:00
Jim Martens f844d99cf1 Sem: Vergleich bis auf Performance abgeschlossen 2014-11-29 16:02:06 +01:00
Jim Martens 812656f45a Sem: Quelle für Verfügbarkeits-Vergleich ergänzt 2014-11-29 16:01:42 +01:00
Jim Martens 8bdd400d7b Sem: Formatierung verbessert 2014-11-29 16:01:22 +01:00
Jim Martens 9aaf3e8e82 Sem: Vergleich begonnen 2014-11-28 12:49:40 +01:00
Jim Martens 1e722cb8ed Sem: Artikel zu Vergl. zw. IPSec und OpenVPN ergänzt 2014-11-28 12:49:18 +01:00
Jim Martens 86dbe5005e Sem: Überflüssige Leerzeile entfernt 2014-11-28 12:48:55 +01:00
Jim Martens ea81ee5a39 Sem: Überflüssige Leerzeile entfernt 2014-11-28 10:28:23 +01:00
Jim Martens 0b27ed8bfe FGI2: Aufgabenblatt fertiggestellt 2014-11-27 17:43:48 +01:00
Jim Martens 47abc700d8 FGI2: Aufgaben 7.4.2 und 7.4.3.a bearbeitet 2014-11-26 12:17:52 +01:00
Jim Martens 6bf58809be FGI2: Aufgabe 7.4.1 bearbeitet 2014-11-26 11:19:59 +01:00
Jim Martens 35ffc9d8f1 FGI2: Renew-Zeichnungen fertiggestellt 2014-11-26 11:19:42 +01:00
Jim Martens 983e067fb0 KBS: Panem-Vortrag optimiert 2014-11-25 19:00:01 +01:00
Jim Martens 4fce1cd0f5 FGI2: Aufgabe 7.4.1 bearbeitet und Aufgabenblatt erstellt 2014-11-25 11:23:31 +01:00
Jim Martens 12b19420f5 Sem: Stichpunkte überarbeitet 2014-11-25 11:23:12 +01:00
2scholz 132ba4bd33 Grundsätzliche Struktur von IPSec-Teil 2014-11-24 10:26:01 +01:00
Jim Martens ba7304b443 FGI2: Namen und Gruppennummer hinzugefügt 2014-11-23 13:06:03 +01:00
Jim Martens b84f9e8589 KBS: Spannung bei Panem-Vortrag verbessert 2014-11-22 22:17:44 +01:00
Jim Martens b8fed42607 SemFrieden: Konferenzprotokolle als Quellen ergänzt 2014-11-22 17:10:46 +01:00
Jim Martens dd4be179b8 SemFrieden: Abstract zu Kombattantenstatus verfasst 2014-11-22 17:10:25 +01:00
Jim Martens cc56230a06 SemFrieden: Erste Struktur hinzugefügt 2014-11-22 17:09:26 +01:00
Jim Martens 2783943a98 SemFrieden: Matrikelnummer einkommentiert 2014-11-22 17:09:03 +01:00
Jim Martens 064333efda SemFrieden: Zitiersystem geändert auf biblatex 2014-11-22 17:08:34 +01:00
Jim Martens 0f59450c35 Sem: Zitiersystem auf biblatex geändert 2014-11-22 17:05:58 +01:00
Jim Martens e51f6d88de Adopted gitignore for biblatex usage 2014-11-22 17:05:12 +01:00
Jim Martens 43ff7a51ea KBS: KBS-Vorträge fertiggestellt 2014-11-21 22:35:05 +01:00
Jim Martens 463967933d KBS: Fachschafts-Roadmap Vortrag ausgearbeitet 2014-11-21 12:04:56 +01:00
Jim Martens 5e0758075e FGI2: Stichpunkte für Vergleich fertiggestellt 2014-11-21 10:35:03 +01:00
Jim Martens d6dbb18638 Sem: Erste Stichpunkte verfasst 2014-11-19 11:02:14 +01:00
Jim Martens ba53fdbe1a FGI2: Blattverbrauch minimiert 2014-11-19 11:01:01 +01:00
Jim Martens b1b9988d2a FGI2: Arbeitsblatt bearbeitet 2014-11-19 10:54:17 +01:00
Jim Martens c8e58a1fa9 Sem-Frieden: Humanitäres Völkerrecht gelesen 2014-11-17 10:56:28 +01:00
Jim Martens 3eff4b5ee5 Sem: Grobe Struktur angelegt 2014-11-17 10:56:07 +01:00
Jim Martens ab26b58ba0 KBS: Kontaktseite in Mailvortrag ergänzt 2014-11-14 17:52:25 +01:00
Jim Martens c710912074 FGI2: 5.3.4 und 5.3.5.b bearbeitet 2014-11-13 16:13:59 +01:00
Jim Martens 964eea4f5b FGI2: 5.3.3 korrigiert 2014-11-12 11:51:59 +01:00
Jim Martens d80b740468 Sem: Zitierstil verbessert 2014-11-12 11:11:06 +01:00
Jim Martens 842a61fc57 Sem: bibtex Datei aktualisiert 2014-11-12 10:59:48 +01:00
Jim Martens 288f2a2e06 FGI2: 5.3.1-5.3.3 sowie 5.4 bearbeitet 2014-11-12 10:58:34 +01:00
Jim Martens e65373736c KBS: Vortrag zu Mails fertiggestellt 2014-11-06 19:25:56 +01:00
Jim Martens 6017880ffb FGI2: 4.3.4 und 4.3.5 bearbeitet 2014-11-06 18:42:00 +01:00
Jim Martens da5357f5fd FGI2: 4.3.2 und 4.4 verbessert 2014-11-06 17:03:11 +01:00
Jim Martens 3e7ecc520e FGI2: Aufgabe 4.4 fertiggestellt 2014-11-05 18:40:49 +01:00
Jim Martens 0bcb3d4371 FGI2: Aufgabe 4.3 und 4.4 bearbeitet 2014-11-05 11:11:51 +01:00
Jim Martens 023e851430 Sem: Review zu Alshamsi verfasst 2014-11-03 10:30:00 +01:00
Jim Martens 367d14e1ec Sem: Review für einige Referenzen verfasst 2014-11-01 17:05:30 +01:00
Jim Martens fee1ce0fc7 KBS: Mail-Vortrag für KBS begonnen 2014-10-31 11:10:46 +01:00
Jim Martens 2d6a8edb0c Sem-Frieden: Rumpfversion des Papers erstellt 2014-10-30 21:56:49 +01:00
Jim Martens e8ee95b36a Sem-Frieden: Literaturliste ergänzt 2014-10-30 21:56:30 +01:00
Jim Martens 876dd1bce5 FGI2: Blatt 3 Aufgabe 1 Punkte 3 und 5 gelöst 2014-10-30 11:20:46 +01:00
Jim Martens d412fc1d36 FGI2: Blatt 3, Aufgabe 1 Punkt 3 fertiggestellt 2014-10-29 12:13:20 +01:00
Jim Martens c3537e6fa7 FGI2: Blatt 3 Aufgabe 2 fertiggestellt 2014-10-29 10:20:37 +01:00
Jim Martens 90b69a0e7f FGI2: Blatt3, Aufgabe 1 teilweise bearbeitet 2014-10-29 10:03:24 +01:00
Jim Martens f88e5a56e3 Sem: Zitierweise von Proceedings korrigiert 2014-10-28 19:43:55 +01:00
Jim Martens 4ac27e8dfb Sem: RFC-Zitierweise überarbeitet 2014-10-27 18:51:58 +01:00
Jim Martens 0525d57b21 SemFrieden: Literaturliste angelegt 2014-10-27 11:32:31 +01:00
Jim Martens c88fa6410a Sem: Literaturliste vorläufig fertig 2014-10-27 11:31:46 +01:00
Jim Martens 83729d8a46 Sem: Literatur hinzugefügt 2014-10-24 10:59:51 +02:00
Jim Martens 4a7a2269d1 FGI2: Arbeitsblatt 2 fertiggestellt 2014-10-24 09:00:57 +02:00
Jim Martens 95c4f49f5e FGI2: Aufgabe 2.4.3 fertiggestellt 2014-10-23 11:17:33 +02:00
Jim Martens 5468cb0c8e FGI2: Aufgabe 2.3.3 fertiggestellt 2014-10-22 10:34:29 +02:00
Jim Martens 8c1cc42a75 FGI2: Aufgaben 2.3.3, 2.4.1 und 2.4.2 bearbeitet 2014-10-21 19:47:54 +02:00
Jim Martens 60dde89560 FGI2: Aufgaben 2.3.1, 2.3.2 und 2.3.3 bearbeitet 2014-10-21 16:06:04 +02:00
Jim Martens f650df9b74 FGI2: Blatt2 angefangen 2014-10-21 09:53:11 +02:00
Jim Martens 7b01c9962d png und jpg Dateien werden von Git ignoriert 2014-10-18 14:41:51 +02:00
Jim Martens 693bf30e61 Sem: Präsentations-Vorlage hinzugefügt 2014-10-18 14:40:12 +02:00
Jim Martens adf128fe7c Sem: Vorlage mit Hinweistexten hinzugefügt 2014-10-18 14:39:48 +02:00
Jim Martens 3459281884 Sem: Grundlage für Paper erstellt 2014-10-18 14:39:27 +02:00
Jim Martens 7fdf443e72 Sem: Liste der Literatur aktualisiert 2014-10-18 14:38:48 +02:00
Jim Martens 42962c3f93 FGI2: Ausdruck in 1.3.2 verbessert 2014-10-18 12:49:15 +02:00
Jim Martens 22070e072b FGI2: Automaten ergänzt und 1.4.5 bearbeitet 2014-10-18 11:27:51 +02:00
Jim Martens 313888bedc FGI2: Gruppenmitglieder eingetragen 2014-10-16 17:37:40 +02:00
Jim Martens 2f3e9a51ea FGI2: Erste Aufgaben bearbeitet 2014-10-16 17:35:02 +02:00
Jim Martens 76b364ec57 FGI-2: Bearbeitung Blatt 1 begonnen 2014-10-16 12:14:01 +02:00
Jim Martens 91b52670b8 OE: Skript erweitert 2014-10-16 10:34:54 +02:00
Jim Martens 3e5f662eb0 Seminar: bib-Datei erstellt 2014-10-16 10:33:06 +02:00
Jim Martens 0ecd5177bb Erste Version eines Skripts hinzugefügt 2014-09-27 20:20:27 +02:00
Jim Martens 6b2a322e7d Verzeichnis für 2014 hinzugefügt 2014-09-27 20:19:56 +02:00
Jim Martens 7a1030af1b EntertainmentProgramm hinzugefügt 2014-09-24 17:50:21 +02:00
Jim Martens 3e58d5d79e Schriftart hinzugefügt 2014-09-24 17:12:05 +02:00
Jim Martens 159b00c68f [OE] Fachschaftskultur-Karten aktualisiert 2014-09-01 20:30:08 +02:00
Jim Martens 932b55810c [OE] Fachschaftskultur-Paper korrigiert 2014-09-01 20:29:51 +02:00
Jim Martens 358044d38e [OE] BScInf-Paper korrigiert 2014-09-01 20:29:26 +02:00
Jim Martens 7ffc16051c [OE] BScInf 2014 Paper hinzugefügt 2014-09-01 20:11:03 +02:00
Jim Martens 029261450b [OE] Entertainment-Programm hinzugefügt 2014-09-01 20:10:41 +02:00
Jim Martens 8332437fb8 [OE] Vorlage für Kärtchen erstellt 2014-08-27 13:41:49 +02:00
Jim Martens d84aafb5eb [OE] Fachschaftskultur-Karten erstellt 2014-08-27 13:40:37 +02:00
Jim Martens 718c1da395 [OE] Korrekturen eingearbeitet 2014-08-20 20:38:26 +02:00
Jim Martens cf3ee8200b OE: Fachschaftskultur-Paper ergänzt 2014-08-10 14:37:57 +02:00
Jim Martens ca6c1d892c OE: Juniorstudenten-Paper hinzugefügt 2014-08-08 13:17:50 +02:00
Jim Martens c9e47282ef OE: Fachschaftskultur-Paper ergänzt
* Kartenerklärungen hinzugefügt
2014-08-06 22:20:08 +02:00
Jim Martens f1241b4a1e Merge branch 'oe' 2014-07-06 21:47:13 +02:00
Jim Martens 19a252c4fb Merge branch 'id' 2014-07-06 21:46:57 +02:00
Jim Martens 3f0ae4ba3a ID-10: Aufgabenblatt bearbeitet 2014-07-06 21:46:41 +02:00
Jim Martens bd09c1508b ID-9: Blatt fertiggestellt 2014-07-06 21:46:08 +02:00
Jim Martens a0430776a4 OE: Fachschaftskultur-Paper hinzugefügt 2014-07-05 13:47:35 +02:00
Jim Martens 61068abcc0 OE: Papervorlagen hinzugefügt 2014-07-05 13:47:11 +02:00
Jim Martens 27ed06f63a ID-9: Datei umbenannt 2014-06-29 15:12:37 +02:00
Jim Martens 00624f60c3 ID-9: Umlautproblem im Header behoben 2014-06-29 15:08:26 +02:00
Jim Martens 822bcc4e7a ID-9: Autoren angepasst 2014-06-29 15:04:59 +02:00
Jim Martens 244a21208a ID-9: Designskizzen rudimentär eingebunden 2014-06-29 15:01:20 +02:00
Jim Martens 1a74e025c0 ID-9: PACT-Analyse vervollständigt 2014-06-29 13:43:57 +02:00
Jim Martens 5670e6dc00 ID-9: Exercise c isn't done yet 2014-06-28 16:25:55 +02:00
Jim Martens ba7caacf51 ID-9: a-d erledigt 2014-06-28 15:58:53 +02:00
Jim Martens 06759c89aa Merge branch 'id' 2014-06-28 15:16:20 +02:00
Jim Martens 474b3fbdbb ID-8: Offiziell anerkannte Begründung ergänzt 2014-06-28 15:13:44 +02:00
Jim Martens 77531f179c Merge branch 'id' 2014-06-19 18:18:55 +02:00
Jim Martens 94c575e9fe ID-8: Bilder hinzugefügt 2014-06-19 18:18:35 +02:00
Jim Martens ab970696d3 Merge branch 'id' 2014-06-11 18:37:49 +02:00
Jim Martens e7ee4d263c ID-8: Aufgabenblatt bearbeitet 2014-06-11 18:37:14 +02:00
Jim Martens 75bc35845b Merge branch 'id' 2014-05-30 13:46:24 +02:00
Jim Martens a65ba5a8b3 ID-7: Autoren angepasst 2014-05-30 13:45:42 +02:00
Jim Martens 348cb4f6ec ID-7: Gruppenaufgabe gelöst 2014-05-26 13:55:21 +02:00
Jim Martens dea41ec3fd ID-7: Individuelle Aufgabe gelöst 2014-05-25 17:13:22 +02:00
Jim Martens f64ea62e4f Merge branch 'id' 2014-05-25 12:44:10 +02:00
Jim Martens f187eed585 ID-6: Gruppenaufgabe 1 bearbeitet
* heuristische Verbesserung: TODO
2014-05-18 13:55:52 +02:00
Jim Martens 56bbd90303 ID-6: Fragebogen weiter ergänzt 2014-05-18 13:12:45 +02:00
Jim Martens 32a53a700e ID-6: Weitere Fragen hinzugefügt 2014-05-17 12:53:40 +02:00
Jim Martens 861c3d0a1e ID-6: Fragebogen begonnen 2014-05-16 22:10:02 +02:00
Jim Martens 2bc9022d1c ID-6: Individuelle Aufgabe bearbeitet 2014-05-16 22:09:37 +02:00
Jim Martens e98af4d8ba Merge branch 'id' 2014-05-13 10:53:53 +02:00
Jim Martens 43eccce6d5 ID-5: Blatt 5 bearbeitet 2014-05-13 10:53:39 +02:00
Jim Martens 8f2c9dadba Merge branch 'id' 2014-05-13 10:52:53 +02:00
Jim Martens dd21b5ecbe KBS: Ausblick ergänzt 2014-05-12 21:17:27 +02:00
Jim Martens 4d8ed895e2 ID-5: Aufgabe 2 bearbeitet 2014-05-09 14:39:09 +02:00
Jim Martens 64a4762a1f ID-4: Gruppenbearbeitung Blatt 4 hinzugefügt 2014-05-08 16:41:03 +02:00
Jim Martens 14dcd1ab07 Merge branch 'id' 2014-05-08 13:55:55 +02:00
Jim Martens d9d15abedd ID-4: Blatt 4 bearbeitet 2014-05-03 16:57:29 +02:00
Jim Martens b4ef156ae0 KBS: Erstellung des PHP-Vortrags fortgesetzt 2014-04-30 14:32:35 +02:00
Jim Martens d3813d3533 KBS: PHP-Vortrag erstellt 2014-04-30 13:32:54 +02:00
Jim Martens 07c06d0cd3 Merge branch 'id' 2014-04-29 16:38:18 +02:00
Jim Martens f24f18e18a ID-3: Blatt 3 Gruppenaufgabe bearbeitet 2014-04-29 16:01:21 +02:00
Jim Martens 473e7ead04 ID-3: Blatt 3 Aufgabe 1 bearbeitet 2014-04-24 16:31:13 +02:00
Jim Martens 7833e0b056 ID-2: Einzel- und Gruppenabgabe getrennt 2014-04-19 11:23:41 +02:00
Jim Martens ca14a7464d ID-2: Zettel 2 bearbeitet 2014-04-17 16:29:31 +02:00
Jim Martens 87afdb6cd5 ID-1: Überflüssige Datei gelöscht 2014-04-17 16:29:23 +02:00
Jim Martens 49b395fcd2 Merge branch 'id' 2014-04-17 15:10:48 +02:00
Jim Martens 4513dd9251 ID-01: Aufgabenblatt 1 aktualisiert. 2014-04-13 22:42:38 +02:00
Jim Martens 6a5bf706b1 KBS Vortrag für Mails bearbeitet 2014-04-10 21:49:35 +02:00
Jim Martens 4f4ab8e9bd ID-1 Erstes Übungsblatt bearbeitet 2014-04-10 17:28:34 +02:00
Jim Martens 669cf6e10a ID Templates hinzugefügt 2014-04-10 14:46:41 +02:00
Jim Martens fdbeb009b2 KBS-Lightning-Talk Mails erstellt 2014-04-08 16:30:07 +02:00
Jim Martens 57f6ef0b63 KBS-Vortrag über menschl. Rassen erstellt 2014-04-07 22:12:35 +02:00
Jim Martens 6fabd137f7 Prosem: Rechtschreibfehler korrigiert. 2014-02-26 17:37:28 +01:00
484 changed files with 77390 additions and 3 deletions

16
.gitignore vendored
View File

@ -4,9 +4,13 @@
*.aux
*.bak
*.bbl
*.bcf
*.blg
*.bmp
*.dvi
*.exe
*.fdb_latexmk
*.fls
*.glg
*.glo
*.gls
@ -14,10 +18,13 @@
*.ilg
*.ind
*.ist
*.jpg
*.JPG
*.lof
*.log
*.lot
*.maf
*.mp4
*.mtc
*.mtc0
*.nav
@ -25,13 +32,20 @@
*.out
*.pdf
*.pdfsync
*.png
*.ps
*.pyg
*.run.xml
*.snm
*.synctex.gz
*.toc
*.vrb
*.xcf
*.xdy
*.tdo
*.zip
*~
build/
cmake-build-debug/
env/
ENV/
_minted*/

View File

@ -0,0 +1,611 @@
\documentclass[10pt,a4paper,oneside,ngerman,numbers=noenddot]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{bytefield}
\usepackage{paralist}
\usepackage{gauss}
\usepackage{pgfplots}
\usepackage{textcomp}
\usepackage[locale=DE,exponent-product=\cdot,detect-all]{siunitx}
\usepackage{tikz}
\usepackage{algpseudocode}
\usepackage{algorithm}
\usepackage{mathtools}
\usepackage{hyperref}
%\usepackage{algorithmic}
%\usepackage{minted}
\usetikzlibrary{automata,matrix,fadings,calc,positioning,decorations.pathreplacing,arrows,decorations.markings}
\usepackage{polynom}
\polyset{style=C, div=:,vars=x}
\pgfplotsset{compat=1.8}
\pagenumbering{arabic}
%\def\thesection{\arabic{section})}
%\def\thesubsection{(\alph{subsection})}
%\def\thesubsubsection{(\roman{subsubsection})}
\makeatletter
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{%
\hskip -\arraycolsep
\let\@ifnextchar\new@ifnextchar
\array{#1}}
\makeatother
\parskip 12pt plus 1pt minus 1pt
\parindent 0pt
\DeclarePairedDelimiter\abs{\lvert}{\rvert}%
\DeclarePairedDelimiter{\ceil}{\lceil}{\rceil}
%switch starred and non-starred (auto-size)
\makeatletter
\let\oldabs\abs
\def\abs{\@ifstar{\oldabs}{\oldabs*}}
\makeatother
\hypersetup{
colorlinks,
citecolor=black,
filecolor=black,
linkcolor=black,
urlcolor=black
}
\begin{document}
\author{Jim Martens}
\title{Zusammenfassung AD}
\maketitle
\section*{Disclaimer}
Diese Zusammenfassung setzt ein Belegen der AD-Veranstaltung voraus. Es kann den Besuch der Vorlesungen und Übungen durch das Semester hinweg nicht ersetzen und erhebt auch keinen Anspruch auf Vollständigkeit. Diese Zusammenfassung bezieht sich auf den Stoff der AD-Veranstaltung im Wintersemester 2015/2016 von Frank Heitmann.
\tableofcontents
\clearpage
\section{Landau--Notation}
Es gibt fünf verschiedene Abschätzungen für die asymptotische Laufzeit eines Algorithmus.
\[
\mathcal{O}, o, \omega, \theta, \Omega
\]
$\mathcal{O}$ gibt die obere Schranke der Laufzeit an. Ein Algorithmus, der in $\mathcal{O}(n)$ liegt, hat demnach eine asymptotische Laufzeit von höchstens $n$. $\mathcal{O}$ wird am häufigsten benutzt, weswegen die gesamte Notation häufig auch O-Notation genannt wird.
$o$ verhält sich ähnlich, weist aber einen kleinen Unterschied auf. Ein Algorithmus in $o(n)$ wächst asymptotisch echt langsamer als $n$.
$\theta$ gibt eine genaue Laufzeit an. Ein Algorithmus in $\theta(n)$ wächst asymptotisch genauso schnell wie $n$.
$\omega$ ist das Gegenstück zu $o$ für die untere Schranke. Ein Algorithmus in $\omega(n)$ wächst echt schneller als $n$.
$\Omega$ schließlich ist das Gegenstück zu $\mathcal{O}$ für die untere Schranke. Ein Algorithmus in $\Omega(n)$ wächst mindestens so schnell wie $n$.
Bei der Landau--Notation fallen Konstanten und niedrigere Potenzen weg. Ein Algorithmus mit der konkreten Laufzeit von $45n^{2} + 100n$ liegt demnach in $\mathcal{O}(n^{2})$.
Geht es um den Vergleich zweier Algorithmen und ist die Laufzeit nicht eindeutig feststellbar, dann hilft es den Limes zu bilden. Dabei gelten folgende Regeln.
\begin{alignat*}{2}
f \in \mathcal{O}(g):& \limsup_{n \rightarrow \infty} \abs{\frac{f(n)}{g(n)}} &<& \infty \\
f \in o(g):& \lim_{n \rightarrow \infty} \abs{\frac{f(n)}{g(n)}} &=& 0 \\
f \in \Omega(g) :& \liminf_{n \rightarrow \infty} \abs{\frac{f(n)}{g(n)}} &>& 0 \\
f \in \omega(g) :& \liminf_{n \rightarrow \infty} \abs{\frac{f(n)}{g(n)}} &=& \infty \\
f \in \theta(g) :& 0 < \liminf_{n \rightarrow \infty} \abs{\frac{f(n)}{g(n)}} \leq \limsup_{n \rightarrow \infty} \abs{\frac{f(n)}{g(n)}} &<& \infty
\end{alignat*}
\section{Mastertheorem}
Das Mastertheorem gehört ebenso wie die Landau--Notation zur Komplexitätstheorie und wird benutzt, um Algorithmen in Komplexität einzuteilen. Es ist jedoch wichtig zu beachten, dass es nur auf ganz bestimmte Algorithmen anwendbar ist. So kann es nur für divide-and-conquer Algorithmen benutzt werden, bei denen sich die Größe der Subprobleme in jedem Rekursionsschritt um einen festen Faktor verkleinert.
Das Mastertheorem behandelt Rekurrenzgleichungen dieser Form:
\[
T(n) = a \cdot T\left(\ceil*{\frac{n}{b}} \right) + \mathcal{O}(n^{d})
\]
In dieser Formel steht $a$ für die Anzahl der Subprobleme pro Rekursionsschritt, $b$ für den Faktor, um den sich die Subprobleme pro Schritt verkleinern, $\mathcal{O}(n^{d})$ für die Kosten des Algorithmus, die nicht in der Rekursion liegen und $n$ für die Größe des Gesamtproblems. Dabei gelten diese formalen Bedingungen für die Variablen:
\[
a \geq 1, b > 1
\]
Hat man solch eine Rekurrenzgleichung gefunden, so kann man daraus die Komplexität berechnen.
\[
T(n) = \begin{cases}
\mathcal{O}(n^{d}) &, \text{wenn}\, d > \log_{b}(a) \\
\mathcal{O}(n^{d} \cdot \log(n)) &, \text{wenn}\, d = \log_{b}(a) \\
\mathcal{O}(n^{\log_{b}(a)}) &, \text{wenn}\, d < \log_{b}(a)
\end{cases}
\]
Die Komplexität der rekursiven Berechnung der Fibonacci-Zahlen beispielsweise lässt sich nicht mit dem Mastertheorem berechnen, da sich die Größe der Subprobleme pro Rekursionsschritt nicht um einen festen Faktor verkleinern.
\section{Datenstrukturen}
\subsection{Listen}
Es gibt zwei unterschiedliche Arten von Listen. Zum Einen gibt es Single-Linked-Lists, die nur in eine Richtung verbunden sind. Will man das letzte Element der Liste finden, muss man demnach vom Kopfelement die gesamte Liste durchgehen, um das letzte Element zu finden. Zum Anderen gibt es die Double-Linked-Lists, die in beide Richtungen verbunden sind. Dort kann man sich in beide Richtungen bewegen und spart damit Suchzeit, wenn man ein Element am Ende der Liste sucht.
Neben diesen zwei grundsätzlichen Arten von Listen gibt es noch unterschiedliche Ausführungsvarianten. In der Praxis trifft man meistens auf Listen, die ein dediziertes Kopf- und Schlusselement haben, welches keinen eigentlichen Wert enthält. Diese "`Wächterknoten"' verhindern eine Reihe von Problemen (siehe SE 1). Desweiteren gibt es noch für Double-Linked-Lists die Variante mit einem und nicht zwei solcher Wächterknoten. Dabei zeigt das letzte Element der Liste wieder auf den Wächterknoten, wodurch ein Ring entsteht.
\subsection{Bäume}
Bäume sind eine besondere Art von Graphen, die keine Zyklen enthalten und ungerichtet sind. Bäume haben einen Wurzelknoten und ein oder mehrere Blätter (Knoten ohne Kindknoten). Jeder Knoten hat entweder Kindknoten oder ist ein Blatt. Bei einem Baum mit einem einzigen Knoten ist dieser sowohl Wurzel als auch Blatt.
Es gibt für t-näre Bäume eine Sprachregelung, die festlegt wie ein solcher Baum heißt. Bei einem vollen (engl.: full) Baum hat jeder Knoten bis auf die Blätter t Kindknoten. Auf der untersten Ebene finden sich also $t^{h}$ Knoten, wobei $h$ die Höhe des Baumes bezeichnet. Die Wurzelebene ist mit Höhe $0$ versehen. Ein vollständiger Baum (engl.: complete) ist bis auf die unterste Ebene wie ein voller Baum. Auf der untersten Ebene befinden sich $1$ bis $t^{h}$ Blätter, die von links nach rechts angeordnet sind.
Die Gesamtanzahl an Knoten entspricht bei einem vollen Baum $t^{h+1}-1$ und bei einem vollständigen Baum $t^{h} - 1 + c : 1 \leq c \leq t^{h}$. Die Höhe des Baumes wiederum lässt sich aus der gesamten Anzahl der Knoten berechnen. Bei einem vollen Baum entspricht die Höhe des Baumes, wenn $n$ die Anzahl der Knoten symbolisiert, $\log_{t}(n+1) - 1$. Für einen vollständigen Baum entspricht es $\ceil*{\log_{t}(n+1)-1}$.
\subsection{Stack}
Ein Stack ist nach dem LIFO--Prinzip organisiert und unterstützt zwei Operationen, die je nach Literatur anders heißen. Die erste Operation erlaubt das Einfügen eines Elementes in den Stack (\texttt{Insert(e)} bzw. \texttt{Push(e)}) und die zweite Operation erlaubt das Entnehmen des zuletzt eingefügten Elementes (\texttt{Delete()} bzw. \texttt{Pop()}).
Ein Stack könnte sinnvoll mit einem Array implementiert werden.
\subsection{Queue}
Eine Queue arbeitet nach dem FIFO--Prinzip und unterstützt ebenso zwei Operationen. Die erste fügt ein Element in die Queue ein (\texttt{Insert(e)} bzw. \texttt{Enqueue(e)}) und die zweite Operation entfernt das vorderste Element in der Queue (\texttt{Delete()} bzw. \texttt{Dequeue()}).
Queues können sinnvoll als Double--Linked--Lists implementiert werden. Alternativ könnte man ein Array nehmen, bei dem man sich immer merkt welche Position gerade vorne und welche hinten ist.
Es gibt Abwandlungen der Queue, die das FIFO--Prinzip verletzen. Dies sind sogenannte Priority Queues, die das vorderste Element nach einer Sortierung bestimmen. Beispielsweise sorgt eine Min-Priority-Queue dafür, dass immer das Element mit dem geringsten Wert ganz vorne steht.
\subsection{Heap}
Ein Heap ist ein besonderer Baum, der nach bestimmten Kriterien sortiert ist. Bei einem Max--Heap befindet sich an der Wurzel der Knoten mit dem höchsten Wert und alle Kindknoten haben kleinere Werte. Dies gilt aber nicht nur für die Wurzel, sondern die Kindknoten jedes Knotens haben kleinere Werte als der Knoten, von dem sie Kinder sind.
Für einen Heap sind fünf Operationen definiert. Die Operation \texttt{Heapify} geht vom gewählten Knoten zu den Blättern und tauscht den Knoten so lange herunter, bis die Heapeigenschaft für den gesamten Heap unter dem Knoten wieder gilt. Die Operation erfordert gültige Heaps unter dem Knoten. Das bedeutet, dass die Subbäume für sich (mit den Kindern des Knotens als Wurzelknoten) gültige Heaps sind. Die worst case Laufzeit ist $\mathcal{O}(\log n)$.
Die zweite Operation \texttt{BuildMaxHeap} geht von den Blättern zum Wurzelknoten und stellt die Heapeigenschaft her. Dabei wird \texttt{Heapify} auf jeden Knoten ausgeführt. In jeder Ebene wird von rechts nach links vorgegangen, angefangen bei dem am weitesten unten rechts stehenden Knoten. Effektiv passiert auf Blattebene jedoch nichts, da diese keine Kindknoten haben, mit denen sie vertauscht werden könnten. Die Laufzeit beträgt $\mathcal{O}(n)$.
Die dritte Operation ist \texttt{ExtractMax}. Die Operation entfernt den Wurzelknoten und zieht den am weitesten rechts unten stehenden Knoten zur Wurzelposition und wendet \texttt{Heapify} auf diesen Knoten an. Die Laufzeit beträgt $\mathcal{O}(\log n)$.
Die vierte Operation heißt \texttt{DecreaseKey} und setzt den betreffenden Knoten auf den gewählten geringeren Wert und wendet \texttt{Heapify} auf diesen Knoten an. Die Laufzeit beträgt $\mathcal{O}(\log n)$.
Das Gegenstück dazu ist \texttt{IncreaseKey}, welches nach dem Verändern des Wertes die Operation \texttt{BuildMaxHeap} ausführt. Die Laufzeit beträgt $\mathcal{O}(\log n)$.
\section{Hashing}
Hashing hat das Ziel eine große Menge an Werten auf eine kleinere Menge abzubilden. Eine der einfachsten Hashfunktionen ist die modulo-Funktion für ganze Zahlen.
Die Zielmenge wird durch ein Array repräsentiert, wobei die Indizes für die Werte stehen, auf die abgebildet wird. Wenn auf eine kleinere Menge abgebildet wird, sind Kollisionen natürlich unvermeidlich. Dies wird dadurch gehandhabt, dass jedes Arrayelement eine Liste ist, in die alle Werte eingetragen werden, die auf den zugehörigen Index gehasht werden.
Das Ziel ist natürlich die Anzahl an Kollisionen pro Index möglichst klein zu halten und möglichst gleichmäßig zu hashen. Aus diesen Anforderungen ergibt sich, dass es bessere und schlechtere Hashfunktionen gibt. Allerdings gibt es keine perfekte Hashfunktion, sondern je nach Anwendungsgebiet kommen andere Funktionen in Betracht.
Eine mögliche Strategie der Kollisionsvermeidung ist das Weiterlaufen bis zum nächsten freien Index. Kommt man am Ende des Arrays an, wird wieder von vorne begonnen.
\section{Sortierverfahren}
\subsection{Selection Sort}
Selection Sort kann man sich gut mit Karten veranschaulichen. Man hat eine Menge an Karten offen vor sich liegen und nimmt nacheinander die Karten in die Hand, beginnend mit der niedrigsten Karte, und reiht sie dort von links nach rechts auf. Die Laufzeit beträgt im worst case $\mathcal{O}(n^{2})$.
\subsection{Insertion Sort}
Insertion Sort wendet man zum Beispiel bei Skat meist intuitiv an. Man hat eine Menge an verdeckten Karten, zieht nacheinander die jeweils höchste Karte und reiht sie entsprechend in die Hand ein, wobei die niedrigste Karte links und die höchstwertige Karte rechts ist. Die worst case Laufzeit beträgt hier ebenfalls $\mathcal{O}(n^{2})$.
\subsection{Bubble Sort}
Bubble Sort ist trotz gleicher worst case Laufzeit deutlich arbeitsaufwendiger für Menschen. Denn bereits bei 4 Werten ergeben sich 16 Durchgänge, um die Werte korrekt zu sortieren.
Die beste Erklärung des Sortierverfahrens bietet der Pseudocode.
\begin{algorithmic}[1]
\Procedure{Bubblesort}{A}
\For{i $\gets$ 1 to A.length - 1}
\For{j $\gets$ A.length downto i + 1}
\If{A[j] < A[j - 1]}
\State exchange A[j] with A[j - 1]
\EndIf
\EndFor
\EndFor
\EndProcedure
\end{algorithmic}
\subsection{Merge Sort}
Merge Sort ist mit einer worst case Laufzeit von $\mathcal{O}(n \cdot \log n)$ eines der besten vergleichsbasierten Sortierverfahren. Man nehme eine Reihe von Werten und sehe sie als einzelne Elemente an. Nun verbindet man immer zwei Elemente miteinander und bringt sie gleich in die richtige Reihenfolge. Dabei geht man rigoros von links nach rechts. Man verbindet demnach das erste und zweite Element, das dritte und vierte Element usw. Ist man damit fertig, verbindet man jeweils zwei dieser Zweierpärchen und sortiert alle enthaltenen Elemente in die richtige Reihenfolge. Auch dies wiederholt man für alle Pärchen. Diesen Vorgang wiederholt man nun solange bis am Ende nur noch eine korrekt sortierte Liste herauskommt.
Merge Sort kann man auch als Divide--and--conquer Verfahren bezeichnen. Es ergibt sich die folgende Rekurrenzgleichung.
\[
T(n) = 2 \cdot T\left(\frac{n}{2}\right) + \mathcal{O}(n)
\]
\subsection{Heap Sort}
Heap Sort macht sich die Heapeigenschaft zunutze und speichert alle Elemente in einem Heap. Somit lässt sich der höchste Wert (Max--Heap) einfach auslesen.
Der Pseudocode liest sich folgendermaßen:
\begin{algorithmic}[1]
\Function{HeapSort}{A}
\State n $\gets$ \Call{length}{A}
\State B $\gets$ empty array of length n
\State H $\gets$ \Call{BuildMaxHeap}{A}
\For{i $\gets$ 1 to n}
\State B(n - i) $\gets$ \Call{ExtractMax}{H}
\EndFor
\State \Return B
\EndFunction
\end{algorithmic}
Das Verfahren hat eine Laufzeit von $\mathcal{O}(n \cdot \log n)$, die sowohl die sowohl worst case als auch best case Laufzeit ist.
\subsection{Quick Sort}
Quick Sort funktioniert ähnlich wie Merge Sort, nur dass es mit einer kompletten Liste anfängt und dann immer weiter aufteilt und am Ende nur noch zusammenfügen muss. Dies funktioniert durch die Wahl eines Pivotelementes. Im Idealfall teilt es die Liste in zwei gleichgroße Teillisten. Die worst case Laufzeit beträgt $\mathcal{O}(n^{2})$. In den meisten Fällen benötigt Quick Sort jedoch nur $\mathcal{O}(n \cdot \log n)$.
Trotz der vermeintlich schlechten Laufzeit wird Quick Sort in der Praxis viel eingesetzt, da es in der Praxis auch auf die Konstanten ankommt, die in der Landau--Notation weggelassen werden. Quick Sort hat vergleichsweise kleine Konstanten wohingegen andere Verfahren mit einer besseren worst case Laufzeit meist größere Konstanten haben.
\subsection{Counting Sort}
Counting Sort ist ein Sortierverfahren, welches nicht vergleichsbasiert ist. Es gibt zwei prominente Implementationsmöglichkeiten. Die erste Möglichkeit ist ein Array mit Countern. Die zweite Möglichkeit ist ein Array mit Listen. Im Folgenden bezeichne K den höchsten Wert in der zu sortierenden Liste (nicht unbedingt die Datenstruktur in der diese Liste an Werten gespeichert ist).
Zunächst der Pseudocode für die erste Variante.
\begin{algorithmic}[1]
\Function{CountingSort}{A}
\State n $\gets$ \Call{length}{A}
\State Allocate array B with length K, initialize each cell with 0
\For{i $\gets$ 1 to n}
\State B[A[i]] $\gets$ B[A[i]] + 1
\EndFor
\State C $\gets$ empty list
\For{key, count in B}
\While{count > 0}
\State C.append(key)
\State count $\gets$ count - 1
\EndWhile
\EndFor
\State \Return C
\EndFunction
\end{algorithmic}
Die zweite For-Schleife ist nur zum Erstellen der sortierten Liste. Die Laufzeit beträgt K für das Initialisieren des Arrays B, n für die erste For-Schleife, K für die zweite For-Schleife und maximal n für die While-Schleife. Dabei ist jedoch zu berücksichtigen, dass die While-Schleife insgesamt über alle Iterationen der For-Schleife nur n--mal aufgerufen wird, denn die Summe aller Counts entspricht der Länge der zu sortierenden Liste an Zahlen. Die Gesamtlaufzeit ist demnach $\mathcal{O}(K + n + n)$ bzw. $\mathcal{O}(K + 2n)$. Die Laufzeit K der zweiten For-Schleife ist hier nicht berücksichtigt, da die While-Schleife insgesamt nur n--mal aufgerufen wird und in den übrigen Fällen in der For-Schleife nichts ausgeführt wird. Nach den Regeln der Landau--Notation entfällt hier das zweite n bzw. die Konstante, da es nichts an der asymptotischen Laufzeit verändert. Die Gesamtlaufzeit ist damit $\mathcal{O}(K + n)$.
Die zweite Variante mit Listen im Array wird etwas anders implementiert, hat aber die gleiche Laufzeit.
\begin{algorithmic}[1]
\Function{CountingSort}{A}
\State n $\gets$ \Call{length}{A}
\State Allocate array B with length K, initialize each cell with an empty list
\For{i $\gets$ 1 to n}
\State B[A[i]].append(A[i])
\EndFor
\State \Return concatenation of B[1], B[2], ..., B[K]
\EndFunction
\end{algorithmic}
Die Laufzeit beträgt hier K für das Initialisieren von B und n für die For-Schleife. Insgesamt ergibt sich somit $\mathcal{O}(n + K)$.
\subsection{Radix Sort}
Radix Sort ist im Prinzip Counting Sort mit ein paar Veränderungen. Die obere Grenze der Zahlen kann riesig sein ($K = \omega(n)$). Um dem beizukommen stellt man sich jede Zahl als ein String vor. Zunächst werden die Zahlen nach der letzten Ziffer sortiert, dann nach der zweitletzten und so weiter. Dieses Verfahren setzt Counting Sort in der zweiten Variante voraus.
Da stets nur nach Ziffern sortiert wird, kann man die Arraylänge auf 10 begrenzen, denn es gibt nur 10 Ziffern. Demzufolge braucht man auch bei einem K von einer Million nur ein Array von 10, um alle Zahlen nach der letzten Ziffer dort einzusortieren in Listen.
Als Beispiel nehme man die Zahlen 10, 3, 5, 15, 20, 7 , 11 und 13. Diese werden in der Reihenfolge ihres Erscheinens sortiert und ergeben folgendes Bild im Array B.
\begin{alignat*}{1}
B[0]:& 10 \rightarrow 20 \\
B[1]:& 11 \\
B[2]:& \\
B[3]:& 3 \rightarrow 13 \\
B[4]:& \\
B[5]:& 5 \rightarrow 15 \\
B[6]:& \\
B[7]:& 7 \\
B[8]:& \\
B[9]:&
\end{alignat*}
Im zweiten Schritt wird nun das Array und in jeder Zelle die Liste von vorne bis hinten durchgegangen und die jeweils aktuelle Zahl wird dann nach der zweitletzten Ziffer in ein Array C einsortiert. Zahlen mit weniger Ziffern (in diesem Fall die einstelligen Zahlen) werden bei der 0 einsortiert. Am Ende ergibt sich die richtige Reihenfolge und es müssen nur noch alle Zahlen konkateniert werden, um das Ergebnis zu erhalten.
Allerdings kann Radix Sort auch auf andere Zahlensysteme angewendet werden. Dann ist die Menge an möglichen Ziffern nicht gleich 10. Daher wird die Anzahl an möglichen Ziffern mit k bezeichnet und die Laufzeit zum Sortieren nach einer Ziffernposition ist dementsprechend $\theta(n + k)$. Counting Sort muss n--mal ausgeführt werden und das Array mit den Listen muss k lang sein und initialisiert werden. Dies ist jedoch nur ein Durchgang. Für die insgesamte Laufzeit von Radix Sort wird eine weitere Variable namens d benötigt, die die maximal mögliche Anzahl an Ziffern in einer Zahl bezeichnet (nicht zu verwechseln mit der Menge der möglichen Ziffern). Die Laufzeit beträgt sodann auch $\theta(d(n + k))$.
In unserem Beispiel oben ist k konstant und d ebenso. Demnach fallen beide Weg und es bleibt $\mathcal{O}(n)$ übrig. Wenn k konstant bleibt, aber d in logarithmische Abhängigkeit zu n gestellt wird, dann ergibt sich eine Laufzeit von $\mathcal{O}(n \cdot \log n)$. Ist d sogar gleich n, dann benötigt Radix Sort $\mathcal{O}(n^{2})$.
Warum wird Radix Sort dann überhaupt benutzt? Mithilfe von einigen Modifikationen kann man eine lineare Laufzeit erreichen und zwar als worst case. Dies ist möglich mit dem Block-based Radix Sort. Allerdings muss man vorher wissen in welchen Bereich die zu sortierenden Zahlen fallen. Genaueres siehe AD-Folienskript.
\subsection{Bucket Sort}
Bucket Sort wird zur Sortierung von reellen Zahlen verwendet, die gleichmäßig im Intervall [0,1] vorkommen. Angenommen man bekommt ein Eingabearray der Länge n, dann kann man das Intervall in n Buckets gleicher Länge zerteilen, wobei Bucket i alle Schlüsselwerte des Intervalls $\left[\frac{i}{n}, \frac{(i + 1)}{n}\right[$ enthält.
Die durchschnittliche Laufzeit beträgt $\mathcal{O}(n)$ und die worst case Laufzeit beträgt $\mathcal{O}(n \cdot \log n)$.
\subsection{Stabilität von Sortierverfahren}
Die Angabe "`wie in AD"' bedeutet, dass die in AD verwendete Variante gemeint ist und es andere Varianten gibt, bei denen das Gegenteilige gilt.
\begin{tabular}{c|c}
Verfahren & stabil \\
\hline
Merge Sort & ja \\
Quick Sort & ja, wie in AD \\
Insertion Sort & nein, wie in AD \\
Selection Sort & nein, wie in AD \\
Heap Sort & nein \\
Bubble Sort & ja \\
Counting Sort & ja, in der zweiten Variante
\end{tabular}
\subsection{Lower bound}
Für alle vergleichsbasierten Sortierverfahren gilt, dass sie eine worst case Laufzeit von $\Omega(n \cdot \log n)$ haben.
\section{Binäre Suchbäume}
Binäre Suchbäume haben eine besondere Struktur, die das Suchen erleichtert. Alle linken Kindknoten sind kleiner oder gleich des Elternknoten und alle rechten Kindknoten sind größer oder gleich des Elternknoten. Diese Bedingung gilt für alle Knoten mit Kindern.
Aufgrund dessen ist das Einfügen in solch einen Baum relativ deterministisch. Das Löschen gestaltet sich da schon etwas komplizierter.
Zunächst werden jedoch die Operationen der Reihe nach durchgegangen. Die erste Operation ist \texttt{Tree-Search} mit folgendem Pseudocode.
\begin{algorithmic}[1]
\Function{Tree-Search}{x, k}
\If{x == NIL or k == x.key}
\State \Return x
\EndIf
\If {k < x.key}
\State \Return \Call{Tree-Search}{x.left, k}
\Else
\State \Return \Call{Tree-Search}{x.right, k}
\EndIf
\EndFunction
\end{algorithmic}
Die Laufzeit beträgt $\mathcal{O}(h)$, wobei h die Höhe des Baumes angibt.
Das Minimum des Baumes kann gefunden werden, indem immer das linke Kind genommen wird bis ein Blatt erreicht wird. Dieses Blatt ist das minimale Element des Baumes. Die Laufzeit beträgt ebenso $\mathcal{O}(h)$. Das Maximum findet man analog, nur dass man dort immer das rechte Kind benutzt.
Die zweite Operation ist \texttt{Inorder-Tree-Walk} mit diesem Pseudocode.
\begin{algorithmic}[1]
\Procedure{Inorder-Tree-Walk}{x}
\If{x $\neq$ NIL}
\State \Call{Inorder-Tree-Walk}{x.left}
\State \Call{print}{x.key}
\State \Call{Inorder-Tree-Walk}{x.right}
\EndIf
\EndProcedure
\end{algorithmic}
Sie hat eine Laufzeit von $\theta(n)$.
Nun kommen wir zum Einfügen von Elementen. Für das Einfügen wird der Baum einfach heruntergegangen und das neue Element an der richtigen Stelle eingefügt. Die Laufzeit beträgt hier ebenso $\mathcal{O}(h)$.
Für das Entfernen eines Blattes ist es vergleichsweise einfach. Das Blatt kann einfach entfernt werden. Wenn ein Knoten nur einen linken oder nur einen rechten Kindknoten hat, dann können diese einfach an die Position des zu löschenden Knoten rücken. Hat der zu löschende Knoten jedoch sowohl einen linken als auch einen rechten Kindknoten, dann muss dessen Nachfolger gefunden werden. Dafür wird der am weitesten links stehende Knoten im rechten Teilbaum (mit dem rechten Kind des zu löschenden Knoten als Wurzel) herangezogen. Dieser wird dann an die Stelle des zu löschenden Knoten gesetzt und dessen rechtes Kind (falls vorhanden) wird an die Stelle von dem Nachfolger gesetzt.
Den Nachfolger zu finden dauert $\mathcal{O}(h)$. Der Rest passiert in konstanter Zeit, sodass die insgesamte Dauer ebenfalls $\mathcal{O}(h)$ ist. Da alle Operationen nur $\mathcal{O}(h)$ benötigen, wäre es natürlich von Interesse das h so klein wie möglich zu haben. Da kommen balancierte Bäume ins Spiel. Bei balancierten Bäumen unterscheidet sich die Höhe der beiden Teilbäume unter einem Knoten um maximal 1 (Bedingung gilt für alle Knoten).
\subsection{AVL Bäume}
AVL Bäume unterstützen Operationen, um die Balanciertheit wiederherzustellen. Allerdings ist dies nicht klausurrelevant, da Frau Luxburg diesen Bereich selber nicht sonderlich versteht.
Dennoch wird hier eine kurze Information zu den Operationen gegeben. Die Operationen heißen \texttt{RightRotate} und \texttt{LeftRotate} und benötigen jeweils nur konstante Zeit. Wird die Balanciertheit eines Baumes durch eine Einfüge- oder Löschoperation verletzt, dann müssen maximal Balancieroperationen ausgeführt werden, um die Balanciertheit wiederherzustellen.
Die Laufzeit vom Einfügen in einen solchen balancierten Baum beträgt $\mathcal{O}(\log n)$. Das Standardeinfügen benötigt $\mathcal{O}(\log n)$, das checken der Balanciertheit dauert ebenfalls $\mathcal{O}(\log n)$ und für die Wiederherstellung der Balanciertheit werden maximal zwei Rotationen in je konstanter Zeit ausgeführt.
\subsection{Red-black tree}
Ein Red-black tree hat folgende Eigenschaften.
\begin{itemize}
\item jeder Knoten ist gefärbt (schwarz/rot)
\item Wurzel und Blätter sind schwarz
\item roter Knoten hat zwei schwarze Kinder
\item von jedem Knoten aus haben alle Pfade zu den Blättern die gleiche Anzahl schwarze Knoten
\item ein schwarzer Knoten kann sowohl schwarze als auch rote Kinder haben
\end{itemize}
\section{Binäre Suche}
Bei der binären Suche hat man ein sortiertes Array gegeben. Nun schaut man sich immer das mittlere Element an und wenn dies kleiner dem gesuchten Element ist, dann wird die binäre Suche auf den rechten Teilbereich des Arrays angewendet. Ist das mittlere Element größer, so wird die binäre Suche auf den linken Teil angewendet und wenn das mittlere Element dem gesuchten Element entspricht, dann wird die Indexposition zurückgegeben. Wird das gesuchte Element nicht gefunden, dann wird \texttt{not\_found} zurückgegeben.
Der Pseudocode sieht folgendermaßen aus.
\begin{algorithmic}[1]
\Function{BinarySearch}{A, value}
\State low $\gets$ 0
\State high $\gets$ N - 1
\While{low $\leq$ high}
\State mid $\gets$ (low + high) / 2
\If{A[mid] > value}
\State high $\gets$ mid - 1
\ElsIf{A[mid] < value}
\State low $\gets$ mid + 1
\Else
\State \Return mid
\EndIf
\EndWhile
\EndFunction
\end{algorithmic}
Die Laufzeit beträgt $\mathcal{O}(\log n)$.
Es gibt jedoch auch noch andere Varianten der binären Suche, wie eine rekursive Variante und eine Variante, bei der, wenn das gesuchte Element nicht vorhanden ist, die Position zurückgegeben wird, bei der das gesuchte Element eingefügt werden kann, sodass das Array weiterhin sortiert ist.
\section{Graphen}
Bei dem Abschnitt über Bäume wurden Graphen kurz angeschnitten. Hier wird sich jetzt ausführlicher mit ihnen beschäftigt. Es gibt verschiedene Arten von Graphen.
Graphen können ungerichtet oder gerichtet sein und sie können gewichtet oder ungewichtet sein. Allerdings ist ein ungewichteter Graph äquivalent mit einem gewichteten Graphen, bei dem alle Kanten das Gewicht 1 haben. Ein ungerichteter Graph kann in einen gleichwertigen gerichteten Graphen überführt werden, indem jede Kante durch eine Hin- und Rückkante ersetzt wird.
Der Grad eines Knotens kann in einem ungerichteten Graphen durch folgende Formel errechnet werden.
\[
Grad(u) = \sum\limits_{v \in V} w(u, v)
\]
Bei einem gerichteten Graphen gibt es zwei Grade bei einem Knoten. Der Eingangsgrad und der Ausgangsgrad. Beide können folgendermaßen berechnet werden.
\begin{alignat*}{1}
Grad-in(u) =& \sum\limits_{v \in V} w(v, u) \\
Grad-out(u) =& \sum\limits_{v \in V} w(u, v)
\end{alignat*}
Pfade sind eine beliebige Abfolge von Kanten. Ein Pfad ist ein Zyklus, wenn ein Knoten sowohl Anfangs- als auch Endknoten ist. Ein Pfad ist einfach (engl.: simple), wenn jeder Knoten nur einmal vorkommt.
Man kann Graphen in zusammenhängende und nicht zusammenhängende Graphen unterteilen. Dabei wird ein Graph als zusammenhängend bezeichnet, wenn von jedem Knoten zu jedem anderen Knoten ein Pfad gefunden werden kann (ungerichteter Graph). Ein gerichteter Graph heißt stark zusammenhängend, wenn von jedem Knoten zu jedem anderen ein gerichteter Pfad gefunden werden kann. Ein gerichteter Graph ist schwach zusammenhängend, wenn der zugehörige ungerichtete Graph zusammenhängend ist.
Eine Zusammenhangskomponente ist ein Teilgraph des Graphen und ist zusammenhängend. In einem zusammenhängenden Graphen gibt es nur eine Zusammenhangskomponente. In einem gerichteten Graphen sind die starken Zusammenhangskomponenten interessant. Dies sind Teilgraphen des Graphen, die stark zusammenhängend sind. Ein Graph kann schwach zusammenhängend sein und dennoch mehrere starke Zusammenhangskomponenten haben.
In einem vollständigen Graph ist jeder Knoten mit jedem anderen Knoten durch eine Kante verbunden.
Die Kanten eines Graphen können mithilfe von Adjazenzlisten oder einer Adjazenzmatrix dargestellt werden.
Desweiteren kann ein Graph dicht sein (engl.: dense). Dies bedeutet, dass der Graph sehr viele Kanten hat (ungefähr $|V|^{2}$). Außerdem kann ein Graph dünn sein (engl.: sparse). Dies bedeutet, dass der Graph sehr wenige Kanten hat.
\section{Graphalgorithmen}
\subsection{Bellman--Ford}
Der Bellman-Ford Algorithmus hat folgenden Pseudocode, der bereits eindrücklich zeigen sollte, wie der Algorithmus funktioniert.
\begin{algorithmic}[1]
\Function{BellmanFord}{G, s}
\State \Call{InitializeSingleSource}{G, s}
\For{i $\gets$ 1 to |V| - 1}
\ForAll{edges (u, v) $\in$ E}
\State \Call{Relax}{u, v}
\EndFor
\EndFor
\ForAll{edges (u, v) $\in$ E}
\If{v.dist > u.dist + w(u, v)} \Comment{auf negativen Zyklus prüfen}
\State \Return false
\EndIf
\EndFor
\EndFunction
\end{algorithmic}
Die Laufzeit ist wenig verwunderlich: $\mathcal{O}(|V| \cdot |E|)$.
Der Algorithmus wird benutzt, um kürzeste Wege zu berechnen. Genauer wird er für das Single--Source--Shortest--Path--Problem verwendet.
\subsection{Dijkstra}
Dijkstra gibt es in zwei Variationen. Beide verhalten sich gleich, haben aber Unterschiede in der Laufzeit. Die naive Variante hat diesen Pseudocode.
\begin{algorithmic}[1]
\Procedure{DijkstraNaive}{G, w, s}
\State S $\gets$ {s}
\State d(s) $\gets$ 0
\While{S $\neq$ V}
\State U $\gets$ {u $\not\in$ S | u neighbour of a vertex $\in$ S}
\ForAll{u $\in$ U}
\ForAll{\Call{pre}{u} $\in$ S that are predecessors of u}
\State d'(u, \Call{pre}{u}) $\gets$ d(\Call{pre}{u}) + w(\Call{pre}{u}, u)
\EndFor
\EndFor
\State $u^{*} \gets$ argmin\{d'(u, \Call{pre}{u}) | u $\in$ U, \Call{pre}{u} $\in$ S\}
\State d($u^{*}$) $\gets$ d'($u^{*}$)
\State S $\gets$ S $\cup$ \{$u^{*}$\}
\EndWhile
\EndProcedure
\end{algorithmic}
Die Laufzeit der naiven Variante beträgt $\mathcal{O}(|V| \cdot |E|)$.
Die zweite Variante ist die Implementation mit der Min--Priority--Queue. Der Pseudocode dieser Variante folgt.
\begin{algorithmic}[1]
\Procedure{Dijkstra}{G, w, s}
\State Q $\gets$ (V, V.dist)
\While{Q $\neq \empty$}
\State u $\gets$ \Call{Extract}{Q}
\ForAll{v adjacent to u}
\State \Call{Relax}{u, v} and update the keys in Q accordingly
\EndFor
\EndWhile
\EndProcedure
\end{algorithmic}
Die Laufzeit mit der Min--Priority--Queue hängt von der Implementation der Queue ab. Bei einem naiven Array beträgt die Laufzeit $\mathcal{O}(n^{2})$. Bei der Implementation mit einem binären Heap sind es nur noch $\mathcal{O}((V + E)\log V)$. Bei der Implementation mit einem t-nären Heap sind es $\mathcal{O}\left((|V| \cdot t + |E|)\frac{\log V}{\log t}\right)$. Die beste Laufzeit kann mit einem Fibonacci Heap erreicht werden: $\mathcal{O}(V \log V + E)$.
Wenn der Graph dicht ist, dann sollte die Arrayimplementation genommen werden. Wenn der Graph dünn ist, dann sollte die Heapimplementation bevorzugt werden. Wenn der Graph sehr dünn ist (|E| = $\Omega(|V|)$) bekommen wir die Laufzeit $\mathcal{O}(|V| \log |V|)$.
Auch dieser Algorithmus gehört zum Single--Source--Shortest--Path--Problem.
\subsection{Floyd--Warshall}
Floyd--Warshall ist ein Graphalgorithmus, mit dem man die kürzesten Pfade von jedem Knoten zu jedem Knoten herausfinden kann (All--Pairs--Shortest--Path--Problem). Der Pseudocode ist folgender.
\begin{algorithmic}[1]
\Function{FloydWarshall}{}
\State n $\gets$ |V|
\State $D^{(0)} \gets$ new $n \times n$ matrix with all values being $\infty$
\ForAll{v $\in$ V}
\State $d_{0}(v,v) \gets$ 0
\EndFor
\ForAll{(u,v) $\in$ E}
\State $d_{0}(u,v) \gets$ w(u,v)
\EndFor
\For{k $\gets$ 1 to n}
\State $D^{k} \gets$ new $n \times n$ matrix
\For{s $\gets$ 1 to n}
\For{t $\gets$ 1 to n}
\State $d_{k}(s, t) \gets$ min\{$d_{k-1}(s, t)$, $d_{k-1}(s, k) + d_{k-1}(k, t)$\}
\EndFor
\EndFor
\EndFor
\State \Return $D^{(n)}$
\EndFunction
\end{algorithmic}
Die Laufzeit beträgt $\mathcal{O}(|V|^{3})$.
\subsection{Bidirektionaler Dijkstra}
Der Bidirektionale Dijkstra besteht aus zwei Dijkstra--Algorithmen, die wechselweise ausgeführt werden. Der erste Dijkstra startet beim Startknoten und der zweite Dijkstra startet beim Zielknoten. Beide Algorithmen sind ganz normale Dijkstra--Algorithmen, die solange laufen bis ein Algorithmus einen Knoten aufnimmt, der bereits von dem anderen Algorithmus aufgenommen wurde.
Der kürzeste Pfad muss aber nicht über diesen Knoten laufen.
\subsection{A*--Suche}
$A^{*}$--Suche ist ein modifizierter Dijkstra--Algorithmus. Für jeden Knoten gibt es einen Wert, der die Entfernung zum Ziel angibt. Diese Entfernung muss nicht immer exakt sein, sodass auch eine untere Grenze wie die Luftlinienentfernung hinreichend ist.
Diese Entfernung wird bei der Auswahl des nächsten Knotens berücksichtigt. Der Knoten mit dem geringsten Abstand zum Startknoten plus der abgeschätzten Entfernung zum Ziel wird als nächstes ausgewählt.
\subsection{SCC--Algorithmus}
Der SCC--Algorithmus wird zum Bestimmen von starken Zusammenhangskomponenten beynutzt. Der Algorithmus kann in Worten wie folgt beschrieben werden.
\begin{algorithmic}[1]
\Procedure{SCC}{G}
\State Call \Call{DFS}{G} to compute the finishing times \Call{f}{u}
\State Compute the reverse graph $G^{t}$
\State Call \Call{DFS}{$G^{t}$}, where the vertices in the main loop are considered in order of decreasing \Call{f}{u}
\State Output the subsets that have been discovered by the individual calls of DFS--Visit
\EndProcedure
\end{algorithmic}
Die Laufzeit beträgt insgesamt $\mathcal{O}(|V| + |E|)$.
\subsection{Kruskals Algorithmus}
Kruskals Algorithmus geht die Kanten in nicht absteigender Reihenfolge durch und nimmt alle Kanten auf, die keinen Zyklus ergeben.
\subsection{Prims Algorithmus}
Prims Algorithmus beginnt bei einem Startknoten, der zu Beginn einziger Bestandteil der Menge $S$ ist. Prim fügt in jedem Schritt eine Kante hinzu, die $S$ mit $V \setminus S$ verbindet und von allen potentiellen Kanten die mit dem geringsten Gewicht ist.
\section{Dynamisches Programmieren}
%TODO
\section{Edit distance}
%TODO
\[
E(i, j) = min\begin{cases}
E(i - 1, j) + 1 \\
E(i, j - 1) + 1 \\
E(i - 1, j - 1) + \mathrm{1}_{x[i] \neq y[j]}
\end{cases}
\]
\end{document}

BIN
bv/crosses.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
bv/diagonallines.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
bv/fingerprint.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

18
bv/hist_dist_Euclidean.m Normal file
View File

@ -0,0 +1,18 @@
function [ distance ] = hist_dist_Euclidean( h1, h2 )
%HIST_DIST_EUCLIDEAN Calculates euclidean distance between histograms
sum_of_differences = 0;
s = size(h1);
if s(1) > 1
n = s(1);
else
n = s(2);
end
for i = 1:n
sum_of_differences = sum_of_differences + (h1(i) - h2(i))^2;
end
distance = sqrt(sum_of_differences);
end

14
bv/hist_dist_Manhattan.m Normal file
View File

@ -0,0 +1,14 @@
function [ distance ] = hist_dist_Manhattan( h1, h2 )
%HIST_DIST_MANHATTAN Calculates the Manhattan distance between 2 histograms
distance = 0;
s = size(h1);
if s(1) > 1
n = s(1);
else
n = s(2);
end
for i = 1:n
distance = distance + abs(h1(i) - h2(i));
end
end

View File

@ -0,0 +1,15 @@
function [ intersection ] = hist_dist_intersection( h1, h2 )
%HIST_DIST_INTERSECTION Calculates intersection between 2 histograms
intersection = 0;
s = size(h1);
if s(1) > 1
n = s(1);
else
n = s(2);
end
for i = 1:n
intersection = intersection + min(h1(i), h2(i));
end
end

BIN
bv/indian.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
bv/laptop-1-1.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 721 KiB

BIN
bv/laptop-1.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 727 KiB

BIN
bv/laptop-1l.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 KiB

BIN
bv/laptop-2.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 KiB

BIN
bv/laptop-2l.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 790 KiB

BIN
bv/littledots.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
bv/swans_gray.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

15
bv/uebung1.m Normal file
View File

@ -0,0 +1,15 @@
% 1.
M = [1 2; 3 4; 5 6];
M = [M(1, 1:2) M(3, 1:2) M(2, 1:2)];
% 2.
lowerBound = 0;
upperBound = 10;
M2 = (upperBound-lowerBound).*rand(10, 10) + lowerBound;
M2(1, 1:end) = 1;
M2(1:end, 1) = 1;
% 3.
rowVector = zeros(1, 200);
rowVector(1:4) = [8 6 4 2];
rowVector(end) = 10;

42
bv/uebung10.m Normal file
View File

@ -0,0 +1,42 @@
% 1.
I_1 = rgb2gray(imread('laptop-1.JPG'));
I_1_lighted = rgb2gray(imread('laptop-1l.JPG'));
I_1_1 = rgb2gray(imread('laptop-1-1.JPG'));
I_2 = rgb2gray(imread('laptop-2.JPG'));
I_2_lighted = rgb2gray(imread('laptop-2l.JPG'));
points_1 = detectHarrisFeatures(I_1);
points_1_lighted = detectHarrisFeatures(I_1_lighted);
points_1_1 = detectHarrisFeatures(I_1_1);
points_2 = detectHarrisFeatures(I_2);
points_2_lighted = detectHarrisFeatures(I_2_lighted);
[features1,valid_points1] = extractFeatures(I_1, points_1);
[features2,valid_points2] = extractFeatures(I_1_lighted, points_1_lighted);
[features3,valid_points3] = extractFeatures(I_1_1, points_1_1);
[features4,valid_points4] = extractFeatures(I_2, points_2);
[features5,valid_points5] = extractFeatures(I_2_lighted, points_2_lighted);
% compare almost identical images (same spot)
indexPairs1 = matchFeatures(features1, features3);
matchedPoints1_1 = valid_points1(indexPairs1(:,1),:);
matchedPoints1_3 = valid_points3(indexPairs1(:,2),:);
figure; showMatchedFeatures(I_1, I_1_1, matchedPoints1_1, matchedPoints1_3);
% compare two different viewpoints, same lighting conditions
indexPairs2 = matchFeatures(features1, features4);
matchedPoints2_1 = valid_points1(indexPairs2(:,1),:);
matchedPoints2_4 = valid_points4(indexPairs2(:,2),:);
figure; showMatchedFeatures(I_1, I_2, matchedPoints2_1, matchedPoints2_4);
% compare same viewpoint, different lighting
indexPairs3 = matchFeatures(features1, features2);
matchedPoints3_1 = valid_points1(indexPairs3(:,1),:);
matchedPoints3_2 = valid_points2(indexPairs3(:,2),:);
figure; showMatchedFeatures(I_1, I_1_lighted, matchedPoints3_1, matchedPoints3_2);
% compare different viewpoints, different lighting
indexPairs4 = matchFeatures(features1, features5);
matchedPoints4_1 = valid_points1(indexPairs4(:,1),:);
matchedPoints4_5 = valid_points5(indexPairs4(:,2),:);
figure; showMatchedFeatures(I_1, I_2_lighted, matchedPoints4_1, matchedPoints4_5);

6
bv/uebung11.txt Normal file
View File

@ -0,0 +1,6 @@
exercise 1:
0: blue
1-left,3: yellow
1-top: red
2,4-left,5,6,7: watershed
4-right,8: green

75
bv/uebung11_presence.m Normal file
View File

@ -0,0 +1,75 @@
A = imread('kobi.png');
[L,N] = superpixels(A,500);
figure
BW = boundarymask(L);
imshow(imoverlay(A,BW,'cyan'))
% Set color of each pixel in output image to the mean RGB color of the
% superpixel region.
outputImage = zeros(size(A),'like',A);
idx = label2idx(L);
numRows = size(A,1);
numCols = size(A,2);
for labelVal = 1:N
redIdx = idx{labelVal};
greenIdx = idx{labelVal}+numRows*numCols;
blueIdx = idx{labelVal}+2*numRows*numCols;
outputImage(redIdx) = mean(A(redIdx));
outputImage(greenIdx) = mean(A(greenIdx));
outputImage(blueIdx) = mean(A(blueIdx));
end
figure
imshow(outputImage)
% 2.
he = imread('hestain.png');
imshow(he), title('H&E image');
text(size(he,2),size(he,1)+15,...
'Image courtesy of Alan Partin, Johns Hopkins University', ...
'FontSize',7,'HorizontalAlignment','right');
cform = makecform('srgb2lab');
lab_he = applycform(he,cform);
ab = double(lab_he(:,:,2:3));
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);
nColors = 3;
% repeat the clustering 3 times to avoid local minima
[cluster_idx, cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean', ...
'Replicates',3);
pixel_labels = reshape(cluster_idx,nrows,ncols);
imshow(pixel_labels,[]), title('image labeled by cluster index');
segmented_images = cell(1,3);
rgb_label = repmat(pixel_labels,[1 1 3]);
for k = 1:nColors
color = he;
color(rgb_label ~= k) = 0;
segmented_images{k} = color;
end
imshow(segmented_images{1}), title('objects in cluster 1');
imshow(segmented_images{2}), title('objects in cluster 2');
imshow(segmented_images{3}), title('objects in cluster 3');
mean_cluster_value = mean(cluster_center,2);
[tmp, idx] = sort(mean_cluster_value);
blue_cluster_num = idx(1);
L = lab_he(:,:,1);
blue_idx = find(pixel_labels == blue_cluster_num);
L_blue = L(blue_idx);
is_light_blue = imbinarize(L_blue);
nuclei_labels = repmat(uint8(0),[nrows ncols]);
nuclei_labels(blue_idx(is_light_blue==false)) = 1;
nuclei_labels = repmat(nuclei_labels,[1 1 3]);
blue_nuclei = he;
blue_nuclei(nuclei_labels ~= 1) = 0;
imshow(blue_nuclei), title('blue nuclei');

4
bv/uebung12_presence.txt Normal file
View File

@ -0,0 +1,4 @@
O_5 = step_0 (W_35*H_3 + W_45*H_4)
= step_0(W_35 * step_0(I_1*W_13 + I_2*W_23) + W_45 * step_0(I_1 W_14 + I_2 W_24))
= step_0(4 * step(2*3 + 4*1) + 1 * step_0(2 * 1 + 4 * (-3)))
= step_0(4 * step(10) + step_0(-10)) = step_0(4) = 1

81
bv/uebung2.tex Normal file
View File

@ -0,0 +1,81 @@
\documentclass[10pt,a4paper,oneside,ngerman,numbers=noenddot]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{bytefield}
\usepackage{paralist}
\usepackage{gauss}
\usepackage{pgfplots}
\usepackage{textcomp}
\usepackage[locale=DE,exponent-product=\cdot,detect-all]{siunitx}
\usepackage{tikz}
\usepackage{algpseudocode}
\usepackage{algorithm}
\usepackage{mathtools}
\usepackage{hyperref}
\usepackage[german=quotes]{csquotes}
%\usepackage{algorithmic}
%\usepackage{minted}
\usetikzlibrary{automata,matrix,fadings,calc,positioning,decorations.pathreplacing,arrows,decorations.markings}
\usepackage{polynom}
\polyset{style=C, div=:,vars=x}
\pgfplotsset{compat=1.8}
\pagenumbering{arabic}
%\def\thesection{\arabic{section})}
%\def\thesubsection{(\alph{subsection})}
%\def\thesubsubsection{(\roman{subsubsection})}
\makeatletter
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{%
\hskip -\arraycolsep
\let\@ifnextchar\new@ifnextchar
\array{#1}}
\makeatother
\parskip 12pt plus 1pt minus 1pt
\parindent 0pt
\MakeOuterQuote{"}
\DeclarePairedDelimiter\abs{\lvert}{\rvert}%
\DeclarePairedDelimiter{\ceil}{\lceil}{\rceil}
\newenvironment{myitemize}{\begin{itemize}\itemsep -9pt}{\end{itemize}} % Zeilenabstand in Aufzählungen geringer
\def\thesection{\arabic{section}.}
%switch starred and non-starred (auto-size)
\makeatletter
\let\oldabs\abs
\def\abs{\@ifstar{\oldabs}{\oldabs*}}
\makeatother
\hypersetup{
colorlinks,
citecolor=black,
filecolor=black,
linkcolor=black,
urlcolor=black
}
\begin{document}
\author{Jim Martens (6420323)}
\title{Computer Vision/Image Processing}
\subtitle{Assignment 2}
\date{2nd Novembre 2016}
\maketitle
\section{}
\begin{alignat*}{1}
\sigma^2 &= \frac{1}{N_{cols}N_{rows}-1} \sum\limits_{x=1}^{N_{cols}} \sum\limits_{y=1}^{N_{rows}} \left( I(y,x) - \mu_{n-1}\right) \cdot \left(I(y,x) - \mu_{n}\right) \\
\intertext{Constraints}
n_0 &= 0 \\
n_n &= n_{n-1} + 1 \\
n_i & \{i \in [0, N_{cols}N_{rows}]\} \\
\mu_0 &= 0 \\
\mu_n &= \mu_{n-1} + \frac{I(y,x) - \mu_{n-1}}{n_n}
\end{alignat*}
\end{document}

42
bv/uebung3.m Normal file
View File

@ -0,0 +1,42 @@
% histogram distances
rice = imread('rice.png');
cam = imread('cameraman.tif');
rice_sp = imnoise(rice, 'salt & pepper', 0.02);
rice_g = imnoise(rice, 'gaussian');
[h1,] = imhist(rice);
[h2,] = imhist(cam);
[h3,] = imhist(rice_sp);
[h4,] = imhist(rice_g);
dist_rice_camera = pdist2(h1', h2');
dist_rice_rice_sp = pdist2(h1', h3');
dist_rice_rice_g = pdist2(h1', h4');
distman_rice_camera = pdist2(h1', h2', 'cityblock');
distman_rice_rice_sp = pdist2(h1', h3', 'cityblock');
distman_rice_rice_g = pdist2(h1', h4', 'cityblock');
% colour spaces
peppers = imread('peppers.png');
peppers_gray = rgb2gray(peppers);
peppers_hsv = rgb2hsv(peppers);
peppers_lab = rgb2lab(peppers);
%figure (1), imhist(peppers(:, :, 1));
%figure (2), imhist(peppers(:, :, 2));
%figure (3), imhist(peppers(:, :, 3));
%figure (4), imshow(peppers_hsv);
%figure (5), imshow(peppers_lab);
%figure (6), imshow(peppers);
% binary images
coins = imread('coins.png');
coins_bw = coins;
for i = 1 : numel(coins_bw)
if coins_bw(i) < 90
coins_bw(i) = 0;
else
coins_bw(i) = 1;
end
end
coins_bw_l = logical(coins_bw);
level = graythresh(coins);
coins_bw_mat = imbinarize(coins, level);
figure (1), imhist(coins);
figure (2), imshow(coins_bw_l);
figure (3), imshow(coins_bw_mat);

18
bv/uebung4.m Normal file
View File

@ -0,0 +1,18 @@
% 2.
fingerprint = imread('fingerprint.png');
rec = strel('rectangle', [2 2]);
lin = strel('line', 4, 0);
opened = imopen(fingerprint, rec);
opened2 = imopen(opened, lin);
figure (1), imshow(fingerprint);
figure (2), imshow(opened);
figure (3), imshow(opened2);
% 3.
img = logical([1 0 0 0 1 1 1 0 1 1]);
se = strel('line', 3, 0);
dilated_img = imdilate(img, se);
eroded_img = imerode(img, se);
%figure (4), imshow(img);
%figure (5), imshow(dilated_img);
%figure (6), imshow(eroded_img);

80
bv/uebung5.m Normal file
View File

@ -0,0 +1,80 @@
% 1.
% First the connected components are determined. Then an array with the
% color values for the gray colors is defined (possible value range 0-255).
% The distance of 20 between each color is chosen to make the difference
% visible for the human eye.
% Afterwards the 8 values are assigned to the pixels of the 8 components.
crosses = imread('crosses.gif');
figure (1), imshow(logical(crosses));
cc = bwconncomp(crosses);
pixelIDs = cc.PixelIdxList;
colors = [60, 80, 100, 120, 140, 160, 180, 200];
for i = 1 : 8
crosses(pixelIDs{i}) = colors(i);
end
figure (2), imshow(crosses);
% 2.
dots = imread('littledots.gif');
dots_bw = dots;
% The threshold 50 is determined by looking at imhist(dots).
% The background is lighter and covers most of the image and
% it therefore is represented by the largest spike.
% The cells are a bit darker and the threshold is therefore on the direct
% left of the spike.
%---
% The cells get the value 1, because the bwconncomp function views black as
% background and white as objects. Lastly the number of objects is
% extracted from the cc_dots struct.
for i = 1 : numel(dots_bw)
if dots_bw(i) < 49
dots_bw(i) = 1;
else
dots_bw(i) = 0;
end
end
dots_bw_l = logical(dots_bw);
cc_dots = bwconncomp(dots_bw);
numObjects_dots = cc_dots.NumObjects;
figure (3), imshow(dots);
figure (4), imshow(dots_bw_l);
% 3.
turkeys = imread('turkeys.jpg');
turkeys_bw = turkeys;
% The threshold 48 is determined by looking at imhist(turkeys).
% There are many spikes and the turkeys have different color values
% belonging to them. The larger part of them is on the darker side. The
% exact threshold was determined by try and error to see which value
% provided the best results. Since there was no single threshold in which
% only the turkeys remained, some morphological operations were necessary.
% Once every white dot not belonging to the turkeys was removed, one large
% dilate operation was necessary to connect the remaining dots in a way
% that represents the turkeys.
% ---
% The last step is to apply bwlabel to the prepared bw image.
for i = 1 : numel(turkeys_bw)
if turkeys_bw(i) == 48
turkeys_bw(i) = 255;
else
turkeys_bw(i) = 0;
end
end
se = strel('line', 3, 90);
se_2 = strel('disk', 14);
se_3 = strel('square', 3);
se_4 = strel('line', 3, 0);
turkeys_opened = imopen(turkeys_bw, se);
t_opened2 = imopen(turkeys_opened, se_4);
t_opened3 = imopen(t_opened2, se_3);
t_dilated = imdilate(t_opened3, se_2);
[labels_turkeys, num_turkeys] = bwlabel(t_dilated);
figure (5), imshow(turkeys_bw);
figure (6), imshow(t_dilated);
% 4.
% I expect the two results to be equal. f shall be the box filter. g shall
% be the result from convolving f with itself. h shall be the result from
% convolving g with the image patch (i). Based on the associativity of
% convolution j = (i * f) * f should be equal to i * (f * f). Combined with
% the commutativity j should be equal to (f * f) * i which is h.

36
bv/uebung5_presence.m Normal file
View File

@ -0,0 +1,36 @@
text = imread('text.png');
%figure, imshow(text);
[L, components] = bwlabel(text, 8);
cc = bwconncomp(text);
pixelIDs = cc.PixelIdxList;
[bin, index] = max(cellfun(@numel, pixelIDs));
text(pixelIDs{index}) = 0;
%figure, imshow(text);
%----------
img = imread('coins.png');
filter = ones(3, 3) / 9;
filter2 = ones(5, 5) / 25;
imgbox = imboxfilt(img);
img2 = imfilter(img, filter);
img3 = imfilter(img, filter2);
%----------
cameraman = imread('cameraman.tif');
pad1 = padarray(cameraman, [50 50]);
pad2 = padarray(cameraman, [50 50], 'circular');
pad3 = padarray(cameraman, [50 50], 'replicate');
pad4 = padarray(cameraman, [50 50], 'symmetric');
figure('Name', 'start'), imshow(cameraman);
figure('Name', 'nullen'), imshow(pad1);
figure('Name', 'circular'), imshow(pad2);
figure('Name', 'replicate'), imshow(pad3);
figure('Name', 'symmetric'), imshow(pad4);
boxfilter = ones(3, 3) / 9;
boxfiltered = imfilter(cameraman, boxfilter, 'replicate');
figure('Name', 'boxfiltered'), imshow(boxfiltered);
boxgaussfilter = ones(5, 5)/25;
boxgaussfiltered1 = imfilter(cameraman, boxgaussfilter, 'replicate');
gaussfiltered = imgaussfilt(cameraman, 1);
figure('Name', 'gaussfiltered'), imshow(gaussfiltered);
figure('Name', 'boxgaussfiltered'), imshow(boxgaussfiltered1);

43
bv/uebung6.m Normal file
View File

@ -0,0 +1,43 @@
% 1.
indian = imread('indian.jpg');
indian_med_filtered1 = medfilt2(indian, [3 3]);
indian_med_filtered2 = medfilt2(indian, [2 2]);
figure (1), imshow(indian);
figure (2), imshow(indian_med_filtered1);
figure (3), imshow(indian_med_filtered2);
% 2.
vertical = rgb2gray(imread('verticallines.png'));
diagonal = rgb2gray(imread('diagonallines.png'));
vertical_med = medfilt2(vertical);
diagonal_med = medfilt2(diagonal);
v_med_plus_d_med = vertical_med + diagonal_med;
vplusd = vertical + diagonal;
vplusd_med = medfilt2(vplusd);
figure (4), imshow(diagonal);
figure (5), imshow(vertical);
figure (6), imshow(vplusd_med);
figure (7), imshow(v_med_plus_d_med);
% 3.
swans = imread('swans_gray.jpg');
swans_gauss = imgaussfilt(swans, 3);
swans_1 = swans - swans_gauss;
swans_size = size(swans_1);
swans_lev1 = impyramid(swans_1, 'reduce');
swans_2 = swans_lev1 - imgaussfilt(swans_lev1, 3);
swans_lev1_size = size(swans_2);
swans_lev2 = impyramid(swans_2, 'reduce');
swans_3 = swans_lev2 - imgaussfilt(swans_lev2, 3);
swans_lev2_size = size(swans_3);
swans_lev3 = impyramid(swans_3, 'reduce');
swans_4 = swans_lev3 - imgaussfilt(swans_lev3, 3);
swans_lev3_size = size(swans_4);
figure (8), imshow(swans);
figure (9), imshow(swans_1);
figure (10), imshow(swans_2);
figure (11), imshow(swans_3);
figure (12), imshow(swans_4);

34
bv/uebung6_presence.m Normal file
View File

@ -0,0 +1,34 @@
coins = imread('coins.png');
coins_sp = imnoise(coins, 'salt & pepper', 0.02);
coins_median = medfilt2(coins_sp);
boxfilter = ones(3, 3) / 9;
coins_mean = imfilter(coins_sp, boxfilter);
%figure (1), imshow(coins);
%figure (2), imshow(coins_sp);
%figure (3), imshow(coins_median);
%figure (4), imshow(coins_mean);
rice = imread('rice.png');
rice_size = size(rice);
imgPyramid = impyramid(rice, 'reduce');
imgPyramid_size = size(imgPyramid);
imgPyramid1 = impyramid(imgPyramid, 'reduce');
imgPyramid1_size = size(imgPyramid1);
imgPyramid2 = impyramid(imgPyramid1, 'reduce');
imgPyramid2_size = size(imgPyramid2);
%figure (5), imshow(rice);
%figure (6), imshow(imgPyramid);
%figure (7), imshow(imgPyramid1);
%figure (8), imshow(imgPyramid2);
circuit = imread('circuit.tif');
circuit_edge1 = edge(circuit, 'Sobel');
circuit_edge2 = edge(circuit, 'Prewitt');
figure (9), imshow(circuit);
figure (10), imshow(circuit_edge1);
figure (11), imshow(circuit_edge2);
coins_Sobel = edge(coins, 'Sobel');
coins_Canny = edge(coins, 'Canny');
figure (12), imshow(coins);
figure (13), imshow(coins_Sobel);
figure (14), imshow(coins_Canny);

44
bv/uebung7.m Normal file
View File

@ -0,0 +1,44 @@
% 1.
% Let's take two sequences f(x) = {0 -> 1, 1 -> 1, 2 -> 100} and
% g(x) = { 0 -> 2, 1 -> 3, 2 -> 0}. The sum of both is
% h(x) = {0 -> 3, 1 -> 4, 2 -> 100}. The mean values are: mean(f) = 34,
% mean(g) = 5/3, mean(h) = 107/3 = 34 + 5/3. The linearity mean(f) +
% mean(g) = mean(f + g) is satisfied. The median values are: median(f) = 1,
% median(g) = 2, median(h) = 4. But median(f) + median(g) != median(f + g).
% Therefore the linearity isn't satisfied which means that median is
% non-linear.
% 2.
peppers = rgb2gray(imread('peppers.png'));
peppers_1 = imnoise(peppers, 'salt & pepper', 0.02);
peppers_2 = imgaussfilt(peppers);
peppers_3 = imnoise(peppers, 'salt & pepper', 0.6);
peppers_4 = imnoise(peppers, 'poisson');
peppers_5 = imgaussfilt(peppers, 3);
peppers_fft = fftshift(log(abs(fft2(peppers))));
peppers1_fft = fftshift(log(abs(fft2(peppers_1))));
peppers2_fft = fftshift(log(abs(fft2(peppers_2))));
peppers3_fft = fftshift(log(abs(fft2(peppers_3))));
peppers4_fft = fftshift(log(abs(fft2(peppers_4))));
peppers5_fft = fftshift(log(abs(fft2(peppers_5))));
%figure (1), imshow(peppers_fft, []);
%figure (2), imshow(peppers1_fft, []);
%figure (3), imshow(peppers2_fft, []);
%figure (4), imshow(peppers3_fft, []);
%figure (5), imshow(peppers4_fft, []);
%figure (6), imshow(peppers5_fft, []);
%3.
low_pass = fspecial('gaussian', [3 3], 1);
low_pass_fft = fft2(low_pass, size(peppers, 1), size(peppers, 2));
high_pass = fspecial('laplacian', 0.2);
high_pass_fft = fft2(high_pass, size(peppers, 1), size(peppers, 2));
peppers_fft2 = fft2(peppers);
peppers_filtered_low_fft = peppers_fft2 .* low_pass_fft;
peppers_filtered_high_fft = peppers_fft2 .* high_pass_fft;
peppers_filtered_low = real(ifft2(peppers_filtered_low_fft));
peppers_filtered_high = real(ifft2(peppers_filtered_high_fft));
figure (7), imshow(peppers_filtered_low, []);
figure (8), imshow(peppers_filtered_high, []);

36
bv/uebung7_presence.m Normal file
View File

@ -0,0 +1,36 @@
% 1.
peppers = rgb2gray(imread('peppers.png'));
peppers_smooth = imgaussfilt(peppers, 3);
peppers_fft = fft2(peppers);
peppers_smooth_fft = fft2(peppers_smooth);
sum_peppers = sum(peppers(:));
first_el = peppers_fft(1, 1);
peppers_fftshift = fftshift(log(abs(peppers_fft)));
peppers_smooth_fftshift = fftshift(log(abs(peppers_smooth_fft)));
%figure (1), imshow(peppers);
%figure (2), imshow(peppers_smooth);
%figure (3), imshow (log(abs(peppers_fft)), []);
%figure (4), imshow (log(abs(peppers_smooth_fft)), []);
%figure (5), imshow(peppers_fftshift, []);
%figure (6), imshow(peppers_smooth_fftshift, []);
%figure (7), imshow(fftshift(peppers))
%---------
tissue = rgb2gray(imread('tissue.png'));
tissue_fft = fft2(tissue);
tissue_fft_processed = log(abs(tissue_fft));
tissue_fft_shifted_processed = fftshift(tissue_fft_processed);
figure (8), imshow(tissue);
figure (9), imshow(tissue_fft_shifted_processed, []);
test = imread('testpat1.png');
test_fft = fft2(test);
test_fft_processed = log(abs(test_fft));
test_fft_shifted_processed = fftshift(test_fft_processed);
figure (10), imshow(test);
figure (11), imshow(test_fft_shifted_processed , []);

129
bv/uebung8.txt Normal file
View File

@ -0,0 +1,129 @@
1.
------
| 1 |
-------------- ------
| 1 | -2 | 1 | + | -2 |
-------------- ------
| 1 |
------
The image has to be padded by 2 rows of zeros. The result of the correlation
follows:
-------------
| 0 | 1 | 0 |
-------------
| 1 |-4 | 1 |
-------------
| 0 | 1 | 0 |
-------------
The resulting filter is the Laplacian filter.
2.
The Prewitt edge detector for vertical edges follows:
-------------
|-1 | 0 | 1 |
-------------
|-1 | 0 | 1 |
-------------
|-1 | 0 | 1 |
-------------
The image of the exercise follows with 1 specifying white and 0 black.
-------------------------
| 0 | 0 | 0 | 1 | 1 | 1 |
-------------------------
| 0 | 0 | 0 | 1 | 1 | 1 |
-------------------------
| 0 | 0 | 0 | 1 | 1 | 1 |
-------------------------
| 0 | 0 | 0 | 1 | 1 | 1 |
-------------------------
| 0 | 0 | 0 | 1 | 1 | 1 |
-------------------------
| 0 | 0 | 0 | 1 | 1 | 1 |
-------------------------
The image has to be padded with 1 row and column of zeros to have a same size
result image. After that the convolution is applied. The padded image follows:
---------------------------------
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
---------------------------------
| 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
---------------------------------
| 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
---------------------------------
| 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
---------------------------------
| 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
---------------------------------
| 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
---------------------------------
| 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
---------------------------------
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
---------------------------------
The result of the convolution follows (without scalar product):
---------------------------
| 0 | 0 | -2 | -2 | 0 | 2 |
---------------------------
| 0 | 0 | -3 | -3 | 0 | 3 |
---------------------------
| 0 | 0 | -3 | -3 | 0 | 3 |
---------------------------
| 0 | 0 | -3 | -3 | 0 | 3 |
---------------------------
| 0 | 0 | -3 | -3 | 0 | 3 |
---------------------------
| 0 | 0 | -2 | -2 | 0 | 2 |
---------------------------
When the non zero values are replaced by ones, this is the result:
-------------------------
| 0 | 0 | 1 | 1 | 0 | 1 |
-------------------------
| 0 | 0 | 1 | 1 | 0 | 1 |
-------------------------
| 0 | 0 | 1 | 1 | 0 | 1 |
-------------------------
| 0 | 0 | 1 | 1 | 0 | 1 |
-------------------------
| 0 | 0 | 1 | 1 | 0 | 1 |
-------------------------
| 0 | 0 | 1 | 1 | 0 | 1 |
-------------------------
3.
-----
| 1 |
----- --------------
| 2 | * | -1 | 0 | 1 |
----- --------------
| 1 |
-----
To accurately process this convolution the image has to be padded by 2 columns
of zeros.
The result of the convolution follows:
--------------
| -1 | 0 | 1 |
--------------
| -2 | 0 | 2 |
--------------
| -1 | 0 | 1 |
--------------
This resulting filter is called Sobel edge detector for horizontal edges.

42
bv/uebung8_presence.m Normal file
View File

@ -0,0 +1,42 @@
cameraman = imread('cameraman.tif');
cam_fft = fft2(cameraman);
%figure, imshow(log(abs(fftshift(cam_fft))), []);
[m, n] = size(cameraman);
mask = zeros(m, n);
rm = round(m/2) + 1;
rn = round(n/2) + 1;
maskSize = 25;
mask(rm - maskSize : rm + maskSize, rn - maskSize : rn + maskSize) = 1;
mask = logical(mask);
figure (1), imshow(mask);
lowPass = fftshift(cam_fft) .* mask;
figure (2), imshow(log(abs(lowPass)), []);
maskHigh = ~mask;
highPass = fftshift(cam_fft) .* maskHigh;
figure (3), imshow(log(abs(highPass)), []);
new = ifft2(fftshift(lowPass));
new_high = ifft2(fftshift(highPass));
figure (4), imshow(new, []);
figure (5), imshow(new_high, []);
new2 = new + new_high;
figure (6), imshow(new2, []);
%
circuit = imread('circuit.tif');
v_filter = [-1;1];
h_filter = [-1 1];
circuit_v = imfilter(circuit, v_filter);
circuit_h = imfilter(circuit, h_filter);
figure (7), imshow(circuit);
figure (8), imshow(circuit_v, []);
figure (9), imshow(circuit_h, []);
%
coins = imread('coins.png');
filter = [0 1 0;1 -4 1; 0 1 0];
coins_filtered = imfilter(coins, filter);
figure (10), imshow(coins);
figure (11), imshow(coins_filtered);

24
bv/uebung9.m Normal file
View File

@ -0,0 +1,24 @@
% 4.
coins = imread('coins.png');
edge_01 = edge(coins, 'Canny', 0.1);
edge_02 = edge(coins, 'Canny', 0.2);
edge_05 = edge(coins, 'Canny', 0.5);
edge_075 = edge(coins, 'Canny', 0.75);
edge_08 = edge(coins, 'Canny', 0.8);
subplot(1, 5, 1);
imshow(edge_01);
subplot(1, 5, 2);
imshow(edge_02);
subplot(1, 5, 3);
imshow(edge_05);
subplot(1, 5, 4);
imshow(edge_075);
subplot(1, 5, 5);
imshow(edge_08);
% With the threshold 0.5 only the outer edges of the
% coins are still detected. With higher thresholds some
% coins disappear completely while 0.1 shows almost every
% line - including those on the coins.
% 5.

215
bv/uebung9.txt Normal file
View File

@ -0,0 +1,215 @@
1.
a + b)
x2y2:
g_x = L(3,2) - L(1,2) = -1
g_y = L(2,3) - L(2,1) = 1
gradient = [-1,1]T
theta(2,2) = arctan(-1/1) = -0.7854
m(2,2) = sqrt((-1)^2 + 1^2) = sqrt(2)
x2y4:
g_x = L(3,4) - L(1,4) = 0
g_y = L(2,5) - L(2,3) = 0
gradient = [0,0]T
theta(2,4) = arctan(0/0) = NaN
m(2,4) = sqrt(0)
x2y6:
g_x = L(3,6) - L(1,6) = 0
g_y = L(2,7) - L(2,5) = 0
gradient = [0,0]T
theta(2,6) = arctan(0/0) = NaN
m(2,6) = sqrt(0)
x2y8:
g_x = L(3,8) - L(1,8) = 0
g_y = L(2,9) - L(2,7) = 0
gradient = [0,0]T
theta(2,8) = arctan(0/0) = NaN
m(2,8) = sqrt(0)
x2y10:
g_x = L(3,10) - L(1,10) = 0
g_y = L(2,11) - L(2,9) = 0
gradient = [0,0]T
theta(2,10) = arctan(0/0) = NaN
m(2,10) = sqrt(0)
x4y2:
g_x = L(5,2) - L(3,2) = 0
g_y = L(4,3) - L(4,1) = 0
gradient = [0,0]T
theta(4,2) = arctan(0/0) = NaN
m(4,2) = sqrt(0)
x4y4:
g_x = L(5,4) - L(3,4) = -1
g_y = L(4,5) - L(4,3) = 1
gradient = [-1,1]T
theta(4,4) = arctan(-1/1) = -0.7854
m(4,4) = sqrt((-1)^2 + 1^2) = sqrt(2)
x4y6:
g_x = L(5,6) - L(3,6) = 0
g_y = L(4,7) - L(4,5) = 0
gradient = [0,0]T
theta(4,6) = arctan(0/0) = NaN
m(4,6) = sqrt(0)
x4y8:
g_x = L(5,8) - L(3,8) = -1
g_y = L(4,9) - L(4,7) = 0
gradient = [-1,0]T
theta(4,8) = arctan(-1/0) = NaN
m(4,8) = sqrt((-1)^2) = sqrt(1) = 1
x4y10:
g_x = L(5,10) - L(3,10) = 0
g_y = L(4,11) - L(4,9) = 0
gradient = [0,0]T
theta(4,10) = arctan(0/0) = NaN
m(4,10) = sqrt(0)
x6y2:
g_x = L(7,2) - L(5,2) = 0
g_y = L(6,3) - L(6,1) = 0
gradient = [0,0]T
theta(6,2) = arctan(0/0) = NaN
m(6,2) = sqrt(0)
x6y4:
g_x = L(7,4) - L(5,4) = 0
g_y = L(6,5) - L(6,3) = 0
gradient = [0,0]T
theta(6,4) = arctan(0/0) = NaN
m(6,4) = sqrt(0)
x6y6:
g_x = L(7,6) - L(5,6) = -1
g_y = L(6,7) - L(6,5) = 0
gradient = [-1,0]T
theta(6,6) = arctan(-1/0) = NaN
m(6,6) = sqrt((-1)^2) = sqrt(1) = 1
x6y8:
g_x = L(7,8) - L(5,8) = 0
g_y = L(6,9) - L(6,7) = 0
gradient = [0,0]T
theta(6,8) = arctan(0/0) = NaN
m(6,8) = sqrt(0)
x6y10:
g_x = L(7,10) - L(5,10) = -1
g_y = L(6,11) - L(6,9) = 1
gradient = [-1,1]T
theta(6,10) = arctan(-1/1) = -0.7854
m(6,10) = sqrt((-1)^2 + 1^2) = sqrt(2)
x8y2:
g_x = L(9,2) - L(7,2) = 0
g_y = L(8,3) - L(8,1) = 0
gradient = [0,0]T
theta(8,2) = arctan(0/0) = NaN
m(8,2) = sqrt(0)
x8y4:
g_x = L(9,4) - L(7,4) = 0
g_y = L(8,5) - L(8,3) = 0
gradient = [0,0]T
theta(8,4) = arctan(0/0) = NaN
m(8,4) = sqrt(0)
x8y6:
g_x = L(9,6) - L(7,6) = 0
g_y = L(8,7) - L(8,5) = 0
gradient = [0,0]T
theta(8,6) = arctan(0/0) = NaN
m(8,6) = sqrt(0)
x8y8:
g_x = L(9,8) - L(7,8) = 0
g_y = L(8,9) - L(8,7) = 0
gradient = [0,0]T
theta(8,8) = arctan(0/0) = NaN
m(8,8) = sqrt(0)
x8y10:
g_x = L(9,10) - L(7,10) = 0
g_y = L(8,11) - L(8,9) = 0
gradient = [0,0]T
theta(8,10) = arctan(0/0) = NaN
m(8,10) = sqrt(0)
x10y2:
g_x = L(11,2) - L(9,2) = 0
g_y = L(10,3) - L(10,1) = 0
gradient = [0,0]T
theta(10,2) = arctan(0/0) = NaN
m(10,2) = sqrt(0)
x10y4:
g_x = L(11,4) - L(9,4) = 0
g_y = L(10,5) - L(10,3) = 0
gradient = [0,0]T
theta(10,4) = arctan(0/0) = NaN
m(10,4) = sqrt(0)
x10y6:
g_x = L(11,6) - L(9,6) = 0
g_y = L(10,7) - L(10,5) = 0
gradient = [0,0]T
theta(10,6) = arctan(0/0) = NaN
m(10,6) = sqrt(0)
x10y8:
g_x = L(11,8) - L(9,8) = 0
g_y = L(10,9) - L(10,7) = 0
gradient = [0,0]T
theta(10,8) = arctan(0/0) = NaN
m(10,8) = sqrt(0)
x10y10:
g_x = L(11,10) - L(9,10) = 0
g_y = L(10,11) - L(10,9) = 0
gradient = [0,0]T
theta(10,10) = arctan(0/0) = NaN
m(10,10) = sqrt(0)
2.
theta = 45
p = 50 * cos(45) + 100 * sin(45) ~ 35,36 + 70,71 = 106,07
theta = -45
p = 50 * cos(-45) + 100 * sin(-45) ~ 35,36 - 70,71 = -35,35
3.
point 2 - horizontal
theta = 0
p = 0 * cos(0) + 100 * sin(0) = 0
point 2 - vertical
theta = 90 or theta = -90
p = 0 * cos(90) + 100 * sin(90) = 100
or
p = 0 * cos(-90) + 100 * sin(-90) = -100
point 3 - horizontal
theta = 0
p = 50 * cos(0) + 50 * sin(0) = 50
point 3 - vertical
theta = 90 or theta = -90
p = 50 * cos(90) + 50 * sin(90) -50
or
p = 50* cos(-90) + 50 * sin(-90) = -50
point 5 - horizontal
theta = 0
p = 100 * cos(0) + 100 * sin(0) = 100
point 5 - vertical
theta = 90 or theta = -90
p = 100 * cos(90) + 100 * sin(90) = 100
or
p = 100 * cos(-90) + 100 * sin(-90) = -100

26
bv/uebung9_presence.m Normal file
View File

@ -0,0 +1,26 @@
RGB = imread('gantrycrane.png');
I = rgb2gray(RGB); % convert to intensity
BW = edge(I,'canny'); % extract edges
[H,T,R] = hough(BW,'RhoResolution',0.5,'Theta',-90:0.5:89.5);
% display the original image
subplot(2,1,1);
imshow(RGB);
title('gantrycrane.png');
% display the hough matrix
subplot(2,1,2);
imshow(imadjust(mat2gray(H)),'XData',T,'YData',R,...
'InitialMagnification','fit');
title('Hough transform of gantrycrane.png');
xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(hot);
peaks = houghpeaks(H, 50, 'Threshold', 30);
figure, imshow(I), hold on
lines = houghlines(BW, T, R, peaks, 'FillGap', 5, 'MinLength', 15);
for i = 1 : length(lines)
xy = [lines(i).point1; lines(i).point2];
plot(xy(:,1), xy(:,2), 'LineWidth', 1, 'Color', 'r');
end

31
bv/variance.m Normal file
View File

@ -0,0 +1,31 @@
function [v] = variance( image )
%VARIANCE Calculates the variance of an image
if isinteger(image)
error(message('MATLAB:var:integerClass'));
end
% prepare some values needed for both mean and variance
n = 0;
mean = 0.0;
M2 = 0.0;
s = size(image);
rows = s(1);
cols = s(2);
for x = 1:cols
for y = 1:rows
n = n + 1;
delta = image(y, x) - mean;
mean = mean + delta/n;
M2 = M2 + delta*(image(y,x) - mean);
end
end
if n < 2
v = float('nan');
else
v = M2 / (n - 1);
end
end

BIN
bv/verticallines.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 KiB

252
ccv/poster/poster-draft.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 4.9 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 4.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 3.5)
project(saliency)
set(CMAKE_CXX_STANDARD 11)
find_package( OpenCV REQUIRED )
add_executable(saliency laplacian_pyramid.cpp oriented_pyramid.cpp fusion.cpp gauss_pyramid.cpp lab_pyramid.cpp main.cpp)
target_link_libraries(saliency ${OpenCV_LIBS})

17
ccv/saliency/eval.sh Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
# Modify the following variables to match your configuration.
# The path where ground truth binary masks are
GT_PATH=/home/jim/git-repos/uni/ccv/saliency/binarymasks/
# The path where saliency maps computed by your system are
SAL_PATH=/home/jim/git-repos/uni/ccv/saliency/saliency_maps/
# The location of the saliency evaluation tool
EVAL_TOOL=/home/jim/git-repos/uni/ccv/saliency/SaliencyEvaluationTool/SaliencyEvaluationTool.jar
# The path where to write results to
RES_PATH=/home/jim/git-repos/uni/ccv/saliency/results
# This ensures the results directory exists
#mkdir -p "${RES_PATH}"
# Run the evaluation script using paths defined above
java -jar ${EVAL_TOOL} pathGT="${GT_PATH}" pathSM="${SAL_PATH}" pathResult="${RES_PATH}"

64
ccv/saliency/fusion.cpp Normal file
View File

@ -0,0 +1,64 @@
#include <opencv2/opencv.hpp>
#include "includes/fusion.h"
/**
* Returns the mean fusion.
*
* @param feature_maps vector of feature maps
* @return conspicuity map
*/
cv::Mat mean_fusion_generic(const std::vector<cv::Mat> feature_maps) {
unsigned long number_of_features = feature_maps.size();
cv::Mat sum_of_features;
double max = -1;
bool first_run = true;
for (auto& f : feature_maps) {
if (first_run) {
sum_of_features = f.clone();
first_run = false;
}
else {
sum_of_features = sum_of_features + f;
}
double max_value;
cv::minMaxLoc(f, nullptr, &max_value);
if (max_value >= max) {
max = max_value;
}
}
cv::Mat C = 1./number_of_features * sum_of_features;
cv::normalize(C, C, 0, max, cv::NORM_MINMAX, -1);
return C.clone();
}
/**
* Returns the max fusion.
*
* @param feature_maps vector of feature maps
* @return conspicuity map
*/
cv::Mat max_fusion_generic(const std::vector<cv::Mat> feature_maps) {
cv::Mat C;
bool first_value = true;
double max = -1;
for (auto& f : feature_maps) {
double max_value;
cv::minMaxLoc(f, nullptr, &max_value);
if (max_value >= max) {
max = max_value;
}
if (first_value) {
C = f.clone();
first_value = false;
}
else {
C = cv::max(C, f);
}
}
cv::normalize(C, C, 0, max, cv::NORM_MINMAX, -1);
return C.clone();
}

View File

@ -0,0 +1,35 @@
#include "includes/gauss_pyramid.h"
gauss_pyramid::gauss_pyramid() {}
gauss_pyramid::gauss_pyramid(const cv::Mat img, float sigma, int number_of_layers)
{
cv::Mat blurredImage;
cv::Mat resizedImage = img.clone();
for (int i = 0; i < number_of_layers; i++)
{
cv::GaussianBlur(resizedImage, blurredImage, cv::Size(0, 0), sigma, sigma, cv::BORDER_REPLICATE);
_layers.push_back(blurredImage.clone());
cv::resize(blurredImage, resizedImage, cv::Size(), 0.5, 0.5, cv::INTER_NEAREST);
}
}
cv::Mat gauss_pyramid::get(int layer) const
{
return _layers.at((unsigned long) layer);
}
cv::Mat gauss_pyramid::get(int layer)
{
return _layers.at((unsigned long) layer);
}
unsigned long gauss_pyramid::get_number_of_layers() const
{
return _layers.size();
}
unsigned long gauss_pyramid::get_number_of_layers()
{
return _layers.size();
}

View File

@ -0,0 +1,7 @@
#ifndef SHEET6_FUSION_H
#define SHEET6_FUSION_H
cv::Mat mean_fusion_generic(const std::vector<cv::Mat> feature_maps);
cv::Mat max_fusion_generic(const std::vector<cv::Mat> feature_maps);
#endif //SHEET6_FUSION_H

View File

@ -0,0 +1,20 @@
#ifndef SHEET3_GAUSS_PYRAMID_H
#define SHEET3_GAUSS_PYRAMID_H
#include <opencv2/opencv.hpp>
class gauss_pyramid
{
private:
std::vector<cv::Mat> _layers;
public:
gauss_pyramid();
gauss_pyramid(const cv::Mat img, float sigma, int number_of_layers);
cv::Mat get(int layer) const;
cv::Mat get(int layer);
unsigned long get_number_of_layers() const;
unsigned long get_number_of_layers();
};
#endif //SHEET3_GAUSS_PYRAMID_H

View File

@ -0,0 +1,137 @@
#ifndef SHEET3_LAB_PYRAMID_H
#define SHEET3_LAB_PYRAMID_H
#include <opencv2/opencv.hpp>
#include "gauss_pyramid.h"
class lab_pyramid {
private:
cv::Mat _inputImage_lab;
cv::Mat _inputImage_float;
cv::Mat _imageChannels[3];
gauss_pyramid _pyramids[3];
// contrast maps
static std::vector<cv::Mat> _cs_contrast_l;
static std::vector<cv::Mat> _sc_contrast_l;
static std::vector<cv::Mat> _cs_contrast_a;
static std::vector<cv::Mat> _sc_contrast_a;
static std::vector<cv::Mat> _cs_contrast_b;
static std::vector<cv::Mat> _sc_contrast_b;
// feature maps
static std::vector<cv::Mat> _F_l;
static std::vector<cv::Mat> _F_a;
static std::vector<cv::Mat> _F_b;
static cv::Mat _cs_F_l;
static cv::Mat _sc_F_l;
static cv::Mat _cs_F_a;
static cv::Mat _cs_F_b;
static cv::Mat _sc_F_a;
static cv::Mat _sc_F_b;
// conspicuity maps
static cv::Mat _C_l;
static cv::Mat _C_a;
static cv::Mat _C_b;
// number of layers
static int _number_of_layers;
public:
const static int COLOR_L = 0;
const static int COLOR_A = 1;
const static int COLOR_B = 2;
/**
* Initializes a LAB pyramid.
*
* @param image_filename the filename of the image that should be used
*/
lab_pyramid(cv::String image_filename);
/**
* Initializes a LAB pyramid.
*
* @param image the image that should be used
*/
lab_pyramid(cv::Mat image);
/**
* Creates the gaussian pyramids for all channels with the given number of layers each.
*
* @param sigma the sigma for the gaussian pyramids
* @param number_of_layers number of layers for gaussian pyramid
*/
void create_pyramids(float sigma, int number_of_layers);
/**
* Before this method can be called, pyramids have to be created via create_pyramids.
*
* @param channel the channel you want to get (COLOR_L, COLOR_A or COLOR_B)
* @return the gaussian_pyramid for the given channel
*/
gauss_pyramid get_pyramid(int channel);
/**
* Before this method can be called, pyramids have to be created via create_pyramids.
*
* @param channel the channel you want to get (COLOR_L, COLOR_A or COLOR_B)
* @return the gaussian_pyramid for the given channel
*/
gauss_pyramid get_pyramid(int channel) const;
/**
* Visualizes the gaussian pyramids.
*
* @param center center pyramid
* @param surround surround pyramid
*/
void static visualize_gaussian_pyrs(const lab_pyramid center, const lab_pyramid surround);
/**
* Computes the center-surround and surround-center contrasts and stores them for later use.
*
* @param center the center pyramid
* @param surround the surround pyramid
* @param number_of_layers the number of layers used to create the two pyramids
*/
void static compute_dog(const lab_pyramid center, const lab_pyramid surround, int number_of_layers);
/**
* Visualizes the center-surround and surround-center contrasts. They have to be computed first.
*/
void static visualize_dog();
/**
* Takes the scale images, adds them up and returns the result.
*
* @param scale_images the scale images
* @return the sum of the scale images
*/
cv::Mat static across_scale_addition(const std::vector<cv::Mat> &scale_images);
/**
* Computes the feature maps.
* Has to be called after compute_dog.
*/
void static compute_feature_maps();
/**
* Computes the conspicuity maps.
* Has to be called after compute_feature_maps.
*/
void static compute_conspicuity_maps();
/**
* Before this method can be called, the conspicuity maps must be computed via compute_conspicuity_maps.
*
* @param channel the channel you want to get (COLOR_L, COLOR_A, COLOR_B)
* @return the conspicuity map for the given channel
*/
cv::Mat static get_conspicuity_map(int channel);
/**
* Visualizes the feature maps.
* Has to be called after compute_feature_maps.
*/
void static visualize_feature_maps();
};
#endif //SHEET3_LAB_PYRAMID_H

View File

@ -0,0 +1,33 @@
#ifndef SHEET5_LAPLACIAN_PYRAMID_H
#define SHEET5_LAPLACIAN_PYRAMID_H
#include <opencv2/opencv.hpp>
#include "gauss_pyramid.h"
class laplacian_pyramid {
private:
std::vector<cv::Mat> _layers;
public:
/**
* Initializes the laplacian pyramid.
* @param pyramid the gaussian pyramid
* @param sigma the blur factor
*/
laplacian_pyramid(const gauss_pyramid& pyramid, float sigma);
/**
* Returns the number of layers.
* @return
*/
unsigned long get_number_of_layers() const;
/**
* Returns the pyramid element at given layer.
* @param layer the requested pyramid layer
* @return pyramid layer
*/
cv::Mat get(int layer) const;
};
#endif //SHEET5_LAPLACIAN_PYRAMID_H

View File

@ -0,0 +1,64 @@
#ifndef SHEET5_ORIENTED_PYRAMID_H
#define SHEET5_ORIENTED_PYRAMID_H
#include <opencv2/opencv.hpp>
#include "laplacian_pyramid.h"
class oriented_pyramid {
private:
std::vector<std::vector<cv::Mat>> _orientation_maps;
std::vector<cv::Mat> _gabor_filters;
std::vector<cv::Mat> _feature_maps;
cv::Mat _C;
/**
* Initializes the Gabor filters.
* @param num_orientations the number of orientations to use
* @param size the size of the Gabor filter
* @param wavelength the wavelength
* @param standard_deviation the standard deviation
*/
void initialize_gabor_filters(float num_orientations, int size, double wavelength, double standard_deviation);
public:
/**
* Initializes the oriented pyramid.
* @param pyramid the laplacian pyramid
* @param num_orientations the number of Gabor filters to apply
* @param size the size of the Gabor filter
* @param wavelength the wavelength
* @param standard_deviation the standard deviation
*/
oriented_pyramid(const laplacian_pyramid& pyramid, int num_orientations, int size,
double wavelength, double standard_deviation);
/**
* Computes the feature maps.
*/
void compute_feature_maps();
/**
* Computes the conspicuity map.
*/
void compute_conspicuity_map();
/**
* Returns the conspicuity map.
* Has to be called after compute_conspicuity_map.
*
* @return conspicuity map
*/
cv::Mat get_conspicuity_map();
/**
* Returns the feature map for the nth orientation.
*
* compute_feature_maps must be called first.
*
* @param orientation the nth orientation
* @return the feature map
*/
cv::Mat get_feature_map(unsigned long orientation);
};
#endif //SHEET5_ORIENTED_PYRAMID_H

View File

@ -0,0 +1,235 @@
#include "includes/lab_pyramid.h"
#include "includes/fusion.h"
// number of layers
int lab_pyramid::_number_of_layers = 0;
// contrast maps
std::vector<cv::Mat> lab_pyramid::_cs_contrast_l = std::vector<cv::Mat>();
std::vector<cv::Mat> lab_pyramid::_sc_contrast_l = std::vector<cv::Mat>();
std::vector<cv::Mat> lab_pyramid::_cs_contrast_a = std::vector<cv::Mat>();
std::vector<cv::Mat> lab_pyramid::_sc_contrast_a = std::vector<cv::Mat>();
std::vector<cv::Mat> lab_pyramid::_cs_contrast_b = std::vector<cv::Mat>();
std::vector<cv::Mat> lab_pyramid::_sc_contrast_b = std::vector<cv::Mat>();
// feature maps
std::vector<cv::Mat> lab_pyramid::_F_l= std::vector<cv::Mat>();
std::vector<cv::Mat> lab_pyramid::_F_a= std::vector<cv::Mat>();
std::vector<cv::Mat> lab_pyramid::_F_b= std::vector<cv::Mat>();
cv::Mat lab_pyramid::_cs_F_l;
cv::Mat lab_pyramid::_sc_F_l;
cv::Mat lab_pyramid::_cs_F_a;
cv::Mat lab_pyramid::_sc_F_a;
cv::Mat lab_pyramid::_cs_F_b;
cv::Mat lab_pyramid::_sc_F_b;
// conspicuity maps
cv::Mat lab_pyramid::_C_l;
cv::Mat lab_pyramid::_C_a;
cv::Mat lab_pyramid::_C_b;
lab_pyramid::lab_pyramid(cv::String image_filename) {
cv::Mat image_rgb = cv::imread(image_filename, cv::IMREAD_COLOR);
cv::cvtColor(image_rgb, _inputImage_lab, cv::COLOR_BGR2Lab);
cv::split(_inputImage_lab ,_imageChannels);
};
lab_pyramid::lab_pyramid(const cv::Mat image) {
image.convertTo(_inputImage_float, CV_32F);
_inputImage_float *= 1./255;
cv::cvtColor(_inputImage_float, _inputImage_lab, cv::COLOR_BGR2Lab);
cv::split(_inputImage_lab, _imageChannels);
}
void lab_pyramid::create_pyramids(float sigma, int number_of_layers)
{
_pyramids[COLOR_L] = gauss_pyramid(_imageChannels[COLOR_L], sigma, number_of_layers);
_pyramids[COLOR_A] = gauss_pyramid(_imageChannels[COLOR_A], sigma, number_of_layers);
_pyramids[COLOR_B] = gauss_pyramid(_imageChannels[COLOR_B], sigma, number_of_layers);
}
gauss_pyramid lab_pyramid::get_pyramid(int channel)
{
switch (channel)
{
case COLOR_L:
return _pyramids[COLOR_L];
case COLOR_A:
return _pyramids[COLOR_A];
case COLOR_B:
return _pyramids[COLOR_B];
default:
throw std::invalid_argument( "received invalid channel value, use COLOR_L, COLOR_A or COLOR_B" );
}
}
gauss_pyramid lab_pyramid::get_pyramid(int channel) const
{
switch (channel)
{
case COLOR_L:
return _pyramids[COLOR_L];
case COLOR_A:
return _pyramids[COLOR_A];
case COLOR_B:
return _pyramids[COLOR_B];
default:
throw std::invalid_argument( "received invalid channel value, use COLOR_L, COLOR_A or COLOR_B" );
}
}
void lab_pyramid::compute_dog(const lab_pyramid center, const lab_pyramid surround, int number_of_layers) {
_number_of_layers = number_of_layers;
// L channel
gauss_pyramid center_l = center.get_pyramid(COLOR_L);
gauss_pyramid surround_l = surround.get_pyramid(COLOR_L);
// A channel
gauss_pyramid center_a = center.get_pyramid(COLOR_A);
gauss_pyramid surround_a = surround.get_pyramid(COLOR_A);
// A channel
gauss_pyramid center_b = center.get_pyramid(COLOR_B);
gauss_pyramid surround_b = surround.get_pyramid(COLOR_B);
for (int layer = 0; layer < number_of_layers; layer++) {
// L channel
cv::Mat center_layer_mat_L = center_l.get(layer);
cv::Mat surround_layer_mat_L = surround_l.get(layer);
cv::Mat dog_raw_cs_L = center_layer_mat_L - surround_layer_mat_L;
cv::Mat dog_final_cs_L;
cv::Mat dog_final_sc_L;
cv::threshold(dog_raw_cs_L, dog_final_cs_L, 0, 1, cv::THRESH_TOZERO);
_cs_contrast_l.push_back(dog_final_cs_L.clone());
cv::Mat dog_raw_sc_L = surround_layer_mat_L - center_layer_mat_L;
cv::threshold(dog_raw_sc_L, dog_final_sc_L, 0, 1, cv::THRESH_TOZERO);
_sc_contrast_l.push_back(dog_final_sc_L.clone());
// A channel
cv::Mat center_layer_mat_a = center_a.get(layer);
cv::Mat surround_layer_mat_a = surround_a.get(layer);
cv::Mat dog_raw_cs_a = center_layer_mat_a - surround_layer_mat_a;
cv::Mat dog_final_cs_a;
cv::Mat dog_final_sc_a;
cv::threshold(dog_raw_cs_a, dog_final_cs_a, 0, 1, cv::THRESH_TOZERO);
_cs_contrast_a.push_back(dog_final_cs_a.clone());
cv::Mat dog_raw_sc_a = surround_layer_mat_a - center_layer_mat_a;
cv::threshold(dog_raw_sc_a, dog_final_sc_a, 0, 1, cv::THRESH_TOZERO);
_sc_contrast_a.push_back(dog_final_sc_a.clone());
// B channel
cv::Mat center_layer_mat_b = center_b.get(layer);
cv::Mat surround_layer_mat_b = surround_b.get(layer);
cv::Mat dog_raw_cs_b = center_layer_mat_b - surround_layer_mat_b;
cv::Mat dog_final_cs_b;
cv::Mat dog_final_sc_b;
cv::threshold(dog_raw_cs_b, dog_final_cs_b, 0, 1, cv::THRESH_TOZERO);
_cs_contrast_b.push_back(dog_final_cs_b.clone());
cv::Mat dog_raw_sc_b = surround_layer_mat_b - center_layer_mat_b;
cv::threshold(dog_raw_sc_b, dog_final_sc_b, 0, 1, cv::THRESH_TOZERO);
_sc_contrast_b.push_back(dog_final_sc_b.clone());
}
}
void lab_pyramid::compute_feature_maps() {
_cs_F_l = across_scale_addition(_cs_contrast_l);
_sc_F_l = across_scale_addition(_sc_contrast_l);
_F_l.push_back(_cs_F_l);
_F_l.push_back(_sc_F_l);
_cs_F_a = across_scale_addition(_cs_contrast_a);
_sc_F_a = across_scale_addition(_sc_contrast_a);
_F_a.push_back(_cs_F_a);
_F_a.push_back(_sc_F_a);
_cs_F_b = across_scale_addition(_cs_contrast_b);
_sc_F_b = across_scale_addition(_sc_contrast_b);
_F_b.push_back(_cs_F_b);
_F_b.push_back(_sc_F_b);
}
void lab_pyramid::compute_conspicuity_maps() {
_C_l = mean_fusion_generic(_F_l);
_C_a = mean_fusion_generic(_F_a);
_C_b = mean_fusion_generic(_F_b);
}
cv::Mat lab_pyramid::get_conspicuity_map(int channel) {
switch (channel)
{
case COLOR_L:
return _C_l;
case COLOR_A:
return _C_a;
case COLOR_B:
return _C_b;
default:
throw std::invalid_argument( "received invalid channel value, use COLOR_L, COLOR_A or COLOR_B" );
}
}
cv::Mat lab_pyramid::across_scale_addition(const std::vector<cv::Mat> &scale_images) {
cv::Mat result = scale_images.front();
cv::Size original_size = scale_images.front().size();
for (unsigned long i = 1; i < scale_images.size(); i++) {
cv::Mat resized_image;
cv::resize(scale_images.at(i), resized_image, original_size, 0, 0, cv::INTER_CUBIC);
result += resized_image;
}
return result;
}
void lab_pyramid::visualize_dog() {
for (unsigned long layer = 0; layer < _number_of_layers; layer++) {
cv::namedWindow("CS L");
cv::imshow("CS L", _cs_contrast_l.at(layer));
cv::namedWindow("SC L");
cv::imshow("SC L", _sc_contrast_l.at(layer));
cv::namedWindow("CS A");
cv::imshow("CS A", _cs_contrast_a.at(layer));
cv::namedWindow("SC A");
cv::imshow("SC A", _sc_contrast_a.at(layer));
cv::namedWindow("CS B");
cv::imshow("CS B", _cs_contrast_b.at(layer));
cv::namedWindow("SC B");
cv::imshow("SC B", _sc_contrast_b.at(layer));
cv::waitKey(0);
}
}
void lab_pyramid::visualize_gaussian_pyrs(const lab_pyramid center, const lab_pyramid surround) {
gauss_pyramid l_c = center.get_pyramid(COLOR_L);
gauss_pyramid l_s = surround.get_pyramid(COLOR_L);
gauss_pyramid a_c = center.get_pyramid(COLOR_A);
gauss_pyramid a_s = surround.get_pyramid(COLOR_A);
gauss_pyramid b_c = center.get_pyramid(COLOR_B);
gauss_pyramid b_s = surround.get_pyramid(COLOR_B);
int number_of_layers = (int) l_c.get_number_of_layers();
for (int layer = 0; layer < number_of_layers; layer++) {
cv::namedWindow("L c");
cv::imshow("L c", l_c.get(layer) * 1./255);
cv::namedWindow("L s");
cv::imshow("L s", l_s.get(layer) * 1./255);
cv::namedWindow("A c");
cv::imshow("A c", a_c.get(layer) * 1./255);
cv::namedWindow("A s");
cv::imshow("A s", a_s.get(layer) * 1./255);
cv::namedWindow("B c");
cv::imshow("B c", b_c.get(layer) * 1./255);
cv::namedWindow("B s");
cv::imshow("B s", b_s.get(layer) * 1./255);
cv::waitKey(0);
}
}
void lab_pyramid::visualize_feature_maps() {
cv::namedWindow("CS F L");
cv::imshow("CS F L", _cs_F_l);
cv::namedWindow("CS F L");
cv::imshow("SC F L", _sc_F_l);
cv::namedWindow("CS F A");
cv::imshow("CS F A", _cs_F_a);
cv::namedWindow("SC F A");
cv::imshow("SC F A", _sc_F_a);
cv::namedWindow("CS F B");
cv::imshow("CS F B", _cs_F_b);
cv::namedWindow("CS F B");
cv::imshow("SC F B", _sc_F_b);
cv::waitKey(0);
}

View File

@ -0,0 +1,20 @@
#include "includes/laplacian_pyramid.h"
laplacian_pyramid::laplacian_pyramid(const gauss_pyramid &pyramid, float sigma) {
_layers = std::vector<cv::Mat>();
unsigned long number_of_layers = pyramid.get_number_of_layers();
for (int i = 0; i < number_of_layers; i++) {
cv::Mat blurred;
cv::GaussianBlur(pyramid.get(i), blurred, cv::Size(), sigma, sigma, cv::BORDER_CONSTANT);
cv::Mat laplacian = pyramid.get(i) - blurred;
_layers.push_back(laplacian.clone());
}
}
cv::Mat laplacian_pyramid::get(int layer) const {
return _layers.at((unsigned long) layer);
}
unsigned long laplacian_pyramid::get_number_of_layers() const {
return _layers.size();
}

79
ccv/saliency/main.cpp Normal file
View File

@ -0,0 +1,79 @@
#include <opencv2/opencv.hpp>
#include "includes/lab_pyramid.h"
#include "includes/fusion.h"
#include "includes/laplacian_pyramid.h"
#include "includes/oriented_pyramid.h"
/**
* Entry point of program
* @param argc number of arguments
* @param argv CLI arguments, 0: name of program, 1: input file name, 2: output file name, 3: flag for usage of orientation
* @return status code (0: everything OK, -1: not right amount of arguments)
*/
int main(int argc, char** argv) {
if (argc != 4) {
printf("usage: <input file name> <output file name> <use orientation>\n");
return -1;
}
// read image
cv::Mat image = cv::imread(argv[1], cv::ImreadModes::IMREAD_COLOR);
bool use_orientation = (strcmp(argv[3], "1") == 0);
// tweakable factors
int layers = 4;
float sigma_center = 3;
float sigma_surround = 13;
float sigma_laplacian = 4;
int number_orientations = 4;
int gabor_size = 7;
double wavelength = 5;
double standard_deviation = 5;
// create LAB pyramids
lab_pyramid lab_pyr_center = lab_pyramid(image);
lab_pyr_center.create_pyramids(sigma_center, layers);
lab_pyramid lab_pyr_surround = lab_pyramid(image);
lab_pyr_surround.create_pyramids(sigma_surround, layers);
// create laplacian pyramid
gauss_pyramid c_pyr_L = lab_pyr_center.get_pyramid(lab_pyramid::COLOR_L);
laplacian_pyramid laplacian_pyr = laplacian_pyramid(c_pyr_L, sigma_laplacian);
// create orientation pyramid
oriented_pyramid oriented_pyr = oriented_pyramid(laplacian_pyr, number_orientations, gabor_size, wavelength,
standard_deviation);
// create contrast maps
lab_pyramid::compute_dog(lab_pyr_center, lab_pyr_surround, layers);
// create feature maps
lab_pyramid::compute_feature_maps();
if (use_orientation) {
oriented_pyr.compute_feature_maps();
}
// create conspicuity maps
lab_pyramid::compute_conspicuity_maps();
if (use_orientation) {
oriented_pyr.compute_conspicuity_map();
}
// get conspicuity maps
std::vector<cv::Mat> conspicuity_maps = std::vector<cv::Mat>();
conspicuity_maps.push_back(lab_pyramid::get_conspicuity_map(lab_pyramid::COLOR_L));
conspicuity_maps.push_back(lab_pyramid::get_conspicuity_map(lab_pyramid::COLOR_A));
conspicuity_maps.push_back(lab_pyramid::get_conspicuity_map(lab_pyramid::COLOR_B));
if (use_orientation) {
conspicuity_maps.push_back(oriented_pyr.get_conspicuity_map());
}
// get saliency map
cv::Mat saliency = mean_fusion_generic(conspicuity_maps);
cv::normalize(saliency, saliency, 0, 255, cv::NORM_MINMAX, -1);
// convert saliency map to correct output format
cv::Mat output_image;
saliency.convertTo(output_image, CV_8UC1);
// write output
cv::imwrite(argv[2], output_image);
return 0;
}

View File

@ -0,0 +1,68 @@
#include "includes/oriented_pyramid.h"
#include "includes/fusion.h"
oriented_pyramid::oriented_pyramid(const laplacian_pyramid &pyramid, int num_orientations, int size,
double wavelength, double standard_deviation) {
_gabor_filters = std::vector<cv::Mat>();
_orientation_maps = std::vector<std::vector<cv::Mat>>();
_feature_maps = std::vector<cv::Mat>();
initialize_gabor_filters(num_orientations, size, wavelength, standard_deviation);
unsigned long number_of_layers = pyramid.get_number_of_layers();
for (unsigned long i = 0; i < num_orientations; i++) {
std::vector<cv::Mat> orientation_vector = std::vector<cv::Mat>();
for (int layer = 0; layer < number_of_layers; layer++) {
cv::Mat filtered_image;
cv::filter2D(pyramid.get(layer), filtered_image, -1, _gabor_filters.at(i), cv::Point(-1, -1), 0, cv::BORDER_CONSTANT);
orientation_vector.push_back(filtered_image.clone());
}
_orientation_maps.push_back(orientation_vector);
}
}
void oriented_pyramid::initialize_gabor_filters(float num_orientations, int size,
double wavelength, double standard_deviation) {
cv::Size size_obj = cv::Size(size, size);
double start_level = num_orientations / 2.0;
for (double level = start_level; level >= 0; level--) {
_gabor_filters.push_back(cv::getGaborKernel(size_obj, standard_deviation, (level/num_orientations) * CV_PI, wavelength,
1, 0, CV_32F));
}
double end_level = start_level;
start_level = num_orientations - 1;
for (double level = start_level; level > end_level; level--) {
_gabor_filters.push_back(cv::getGaborKernel(size_obj, standard_deviation, (level/num_orientations) * CV_PI, wavelength,
1, 0, CV_32F));
}
}
void oriented_pyramid::compute_feature_maps() {
unsigned long num_orientations = _orientation_maps.size();
for (unsigned long i = 0; i < num_orientations; i++) {
cv::Mat feature_map = (cv::Mat &&) _orientation_maps.at(i).front();
cv::Size original_size = feature_map.size();
unsigned long num_layers = _orientation_maps.at(i).size();
for (unsigned long layer = 1; layer < num_layers; layer++) {
cv::Mat resized_image;
cv::resize(_orientation_maps.at(i).at(layer), resized_image, original_size, 0, 0, cv::INTER_CUBIC);
feature_map += resized_image;
}
_feature_maps.push_back(feature_map.clone());
}
}
void oriented_pyramid::compute_conspicuity_map() {
_C = max_fusion_generic(_feature_maps);
}
cv::Mat oriented_pyramid::get_conspicuity_map() {
return _C;
}
cv::Mat oriented_pyramid::get_feature_map(unsigned long orientation) {
return _feature_maps.at(orientation).clone();
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,260 @@
# This file shows results of an evaluation of saliencymaps as described in
# R. Achanta, S. Hemami, F. Estrada and S. Süsstrunk, Frequency-tuned Salient Region Detection, IEEE International Conference on Computer Vision and Pattern Recognition (CVPR), 2009.
#
# threshold mean_precision mean_recall
0 0.1989 1.000
1 0.1989 1.000
2 0.1989 1.000
3 0.1989 1.000
4 0.1989 1.000
5 0.1989 1.000
6 0.1989 1.000
7 0.1989 1.000
8 0.1989 1.000
9 0.1989 1.000
10 0.1989 1.000
11 0.1989 1.000
12 0.1989 1.000
13 0.1989 1.000
14 0.1990 1.000
15 0.1990 1.000
16 0.1990 1.000
17 0.1990 1.000
18 0.1990 1.000
19 0.1990 1.000
20 0.1990 1.000
21 0.1990 1.000
22 0.1990 1.000
23 0.1993 1.000
24 0.1993 1.000
25 0.1993 1.000
26 0.1993 1.000
27 0.1993 1.000
28 0.1993 1.000
29 0.1996 1.000
30 0.1996 1.000
31 0.1996 1.000
32 0.1996 1.000
33 0.1996 1.000
34 0.1996 1.000
35 0.2001 1.000
36 0.2001 1.000
37 0.2001 1.000
38 0.2001 1.000
39 0.2007 1.000
40 0.2007 1.000
41 0.2007 1.000
42 0.2007 1.000
43 0.2014 1.000
44 0.2014 1.000
45 0.2014 1.000
46 0.2014 1.000
47 0.2022 1.000
48 0.2022 1.000
49 0.2022 1.000
50 0.2022 1.000
51 0.2032 0.9999
52 0.2032 0.9999
53 0.2032 0.9999
54 0.2043 0.9999
55 0.2043 0.9999
56 0.2043 0.9999
57 0.2056 0.9999
58 0.2056 0.9999
59 0.2056 0.9999
60 0.2070 0.9998
61 0.2070 0.9998
62 0.2085 0.9998
63 0.2085 0.9998
64 0.2085 0.9998
65 0.2101 0.9997
66 0.2101 0.9997
67 0.2120 0.9996
68 0.2120 0.9996
69 0.2120 0.9996
70 0.2139 0.9995
71 0.2139 0.9995
72 0.2160 0.9994
73 0.2160 0.9994
74 0.2182 0.9992
75 0.2182 0.9992
76 0.2205 0.9991
77 0.2205 0.9991
78 0.2229 0.9989
79 0.2229 0.9989
80 0.2255 0.9987
81 0.2255 0.9987
82 0.2282 0.9985
83 0.2282 0.9985
84 0.2310 0.9982
85 0.2310 0.9982
86 0.2340 0.9980
87 0.2371 0.9977
88 0.2371 0.9977
89 0.2402 0.9974
90 0.2402 0.9974
91 0.2435 0.9970
92 0.2435 0.9970
93 0.2469 0.9966
94 0.2503 0.9962
95 0.2503 0.9962
96 0.2539 0.9957
97 0.2577 0.9952
98 0.2577 0.9952
99 0.2616 0.9946
100 0.2655 0.9939
101 0.2655 0.9939
102 0.2696 0.9932
103 0.2739 0.9925
104 0.2739 0.9925
105 0.2783 0.9917
106 0.2828 0.9909
107 0.2873 0.9900
108 0.2873 0.9900
109 0.2920 0.9891
110 0.2969 0.9881
111 0.3018 0.9871
112 0.3018 0.9871
113 0.3069 0.9862
114 0.3122 0.9851
115 0.3176 0.9840
116 0.3231 0.9828
117 0.3231 0.9828
118 0.3287 0.9815
119 0.3344 0.9802
120 0.3402 0.9789
121 0.3461 0.9775
122 0.3520 0.9761
123 0.3580 0.9745
124 0.3580 0.9745
125 0.3640 0.9729
126 0.3702 0.9712
127 0.3766 0.9695
128 0.3830 0.9676
129 0.3895 0.9658
130 0.3961 0.9639
131 0.4027 0.9619
132 0.4094 0.9599
133 0.4162 0.9579
134 0.4230 0.9558
135 0.4299 0.9536
136 0.4369 0.9514
137 0.4439 0.9491
138 0.4509 0.9467
139 0.4580 0.9443
140 0.4651 0.9418
141 0.4722 0.9392
142 0.4793 0.9366
143 0.4864 0.9338
144 0.4936 0.9310
145 0.5008 0.9281
146 0.5080 0.9252
147 0.5152 0.9222
148 0.5224 0.9191
149 0.5368 0.9128
150 0.5438 0.9094
151 0.5510 0.9061
152 0.5581 0.9026
153 0.5652 0.8992
154 0.5723 0.8956
155 0.5793 0.8920
156 0.5932 0.8846
157 0.5999 0.8808
158 0.6066 0.8770
159 0.6131 0.8730
160 0.6258 0.8649
161 0.6320 0.8608
162 0.6382 0.8565
163 0.6444 0.8523
164 0.6565 0.8435
165 0.6623 0.8390
166 0.6681 0.8345
167 0.6738 0.8298
168 0.6849 0.8203
169 0.6903 0.8154
170 0.6955 0.8105
171 0.7058 0.8004
172 0.7107 0.7953
173 0.7156 0.7900
174 0.7250 0.7794
175 0.7295 0.7741
176 0.7383 0.7632
177 0.7425 0.7576
178 0.7467 0.7519
179 0.7549 0.7403
180 0.7590 0.7343
181 0.7667 0.7222
182 0.7705 0.7161
183 0.7778 0.7036
184 0.7814 0.6973
185 0.7849 0.6911
186 0.7920 0.6785
187 0.7955 0.6722
188 0.8023 0.6594
189 0.8057 0.6531
190 0.8123 0.6404
191 0.8188 0.6273
192 0.8220 0.6207
193 0.8279 0.6074
194 0.8307 0.6007
195 0.8359 0.5870
196 0.8385 0.5800
197 0.8432 0.5658
198 0.8475 0.5513
199 0.8495 0.5440
200 0.8535 0.5293
201 0.8569 0.5146
202 0.8586 0.5073
203 0.8619 0.4923
204 0.8649 0.4772
205 0.8663 0.4696
206 0.8691 0.4544
207 0.8717 0.4392
208 0.8729 0.4316
209 0.8754 0.4165
210 0.8778 0.4013
211 0.8800 0.3861
212 0.8811 0.3784
213 0.8833 0.3631
214 0.8856 0.3481
215 0.8877 0.3332
216 0.8896 0.3185
217 0.8913 0.3037
218 0.8921 0.2964
219 0.8938 0.2819
220 0.8954 0.2676
221 0.8968 0.2534
222 0.8981 0.2392
223 0.8992 0.2252
224 0.9001 0.2116
225 0.9010 0.1983
226 0.9014 0.1918
227 0.9023 0.1792
228 0.9031 0.1673
229 0.9038 0.1558
230 0.9044 0.1449
231 0.9053 0.1347
232 0.9065 0.1250
233 0.9072 0.1155
234 0.9076 0.1066
235 0.9075 0.09809
236 0.9067 0.08995
237 0.9066 0.08229
238 0.9063 0.07512
239 0.9052 0.06512
240 0.9051 0.05904
241 0.9048 0.05330
242 0.9047 0.04790
243 0.9043 0.04277
244 0.9036 0.03787
245 0.9017 0.03327
246 0.9011 0.02900
247 0.9004 0.02321
248 0.8996 0.01976
249 0.8990 0.01643
250 0.8983 0.01345
251 0.8964 0.01070
252 0.8951 0.006874
253 0.8944 0.004407
254 0.8948 0.002368
255 0.8955 0.0008420

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,260 @@
# This file shows results of an evaluation of saliencymaps as described in
# R. Achanta, S. Hemami, F. Estrada and S. Süsstrunk, Frequency-tuned Salient Region Detection, IEEE International Conference on Computer Vision and Pattern Recognition (CVPR), 2009.
#
# threshold mean_precision mean_recall
0 0.1989 1.000
1 0.1990 1.000
2 0.1990 1.000
3 0.1990 1.000
4 0.1990 1.000
5 0.1990 1.000
6 0.1990 1.000
7 0.1990 1.000
8 0.1990 1.000
9 0.1990 1.000
10 0.1990 1.000
11 0.1990 1.000
12 0.1990 1.000
13 0.1990 1.000
14 0.1995 1.000
15 0.1995 1.000
16 0.1995 1.000
17 0.1995 1.000
18 0.1995 1.000
19 0.1995 1.000
20 0.1995 1.000
21 0.1995 1.000
22 0.1995 1.000
23 0.2010 0.9999
24 0.2010 0.9999
25 0.2010 0.9999
26 0.2010 0.9999
27 0.2010 0.9999
28 0.2010 0.9999
29 0.2039 0.9996
30 0.2039 0.9996
31 0.2039 0.9996
32 0.2039 0.9996
33 0.2039 0.9996
34 0.2039 0.9996
35 0.2078 0.9989
36 0.2078 0.9989
37 0.2078 0.9989
38 0.2078 0.9989
39 0.2124 0.9976
40 0.2124 0.9976
41 0.2124 0.9976
42 0.2124 0.9976
43 0.2176 0.9955
44 0.2176 0.9955
45 0.2176 0.9955
46 0.2176 0.9955
47 0.2232 0.9923
48 0.2232 0.9923
49 0.2232 0.9923
50 0.2232 0.9923
51 0.2290 0.9880
52 0.2290 0.9880
53 0.2290 0.9880
54 0.2352 0.9829
55 0.2352 0.9829
56 0.2352 0.9829
57 0.2415 0.9766
58 0.2415 0.9766
59 0.2415 0.9766
60 0.2480 0.9695
61 0.2480 0.9695
62 0.2544 0.9612
63 0.2544 0.9612
64 0.2544 0.9612
65 0.2607 0.9520
66 0.2607 0.9520
67 0.2669 0.9415
68 0.2669 0.9415
69 0.2669 0.9415
70 0.2729 0.9295
71 0.2729 0.9295
72 0.2788 0.9169
73 0.2788 0.9169
74 0.2846 0.9036
75 0.2846 0.9036
76 0.2901 0.8895
77 0.2901 0.8895
78 0.2951 0.8742
79 0.2951 0.8742
80 0.2996 0.8577
81 0.2996 0.8577
82 0.3036 0.8406
83 0.3036 0.8406
84 0.3073 0.8230
85 0.3073 0.8230
86 0.3106 0.8050
87 0.3135 0.7866
88 0.3135 0.7866
89 0.3160 0.7680
90 0.3160 0.7680
91 0.3182 0.7494
92 0.3182 0.7494
93 0.3200 0.7305
94 0.3213 0.7114
95 0.3213 0.7114
96 0.3222 0.6922
97 0.3226 0.6727
98 0.3226 0.6727
99 0.3225 0.6528
100 0.3220 0.6329
101 0.3220 0.6329
102 0.3212 0.6133
103 0.3199 0.5939
104 0.3199 0.5939
105 0.3184 0.5750
106 0.3166 0.5562
107 0.3146 0.5381
108 0.3146 0.5381
109 0.3123 0.5203
110 0.3099 0.5034
111 0.3073 0.4870
112 0.3073 0.4870
113 0.3046 0.4713
114 0.3019 0.4563
115 0.2991 0.4418
116 0.2963 0.4280
117 0.2963 0.4280
118 0.2935 0.4149
119 0.2907 0.4023
120 0.2878 0.3902
121 0.2849 0.3787
122 0.2820 0.3677
123 0.2790 0.3571
124 0.2790 0.3571
125 0.2760 0.3471
126 0.2729 0.3375
127 0.2698 0.3283
128 0.2669 0.3196
129 0.2641 0.3113
130 0.2613 0.3035
131 0.2587 0.2960
132 0.2562 0.2890
133 0.2538 0.2823
134 0.2514 0.2759
135 0.2489 0.2697
136 0.2464 0.2636
137 0.2439 0.2578
138 0.2415 0.2522
139 0.2393 0.2470
140 0.2373 0.2419
141 0.2352 0.2370
142 0.2331 0.2322
143 0.2312 0.2275
144 0.2294 0.2229
145 0.2276 0.2185
146 0.2253 0.2142
147 0.2237 0.2099
148 0.2223 0.2057
149 0.2190 0.1975
150 0.2173 0.1935
151 0.2156 0.1895
152 0.2136 0.1855
153 0.2118 0.1816
154 0.2098 0.1778
155 0.2076 0.1740
156 0.2034 0.1667
157 0.2015 0.1632
158 0.1995 0.1599
159 0.1975 0.1566
160 0.1933 0.1500
161 0.1910 0.1468
162 0.1888 0.1437
163 0.1863 0.1405
164 0.1814 0.1345
165 0.1779 0.1315
166 0.1749 0.1286
167 0.1722 0.1256
168 0.1675 0.1199
169 0.1653 0.1171
170 0.1631 0.1145
171 0.1586 0.1092
172 0.1564 0.1065
173 0.1540 0.1039
174 0.1491 0.09858
175 0.1466 0.09600
176 0.1419 0.09108
177 0.1396 0.08870
178 0.1373 0.08638
179 0.1325 0.08195
180 0.1303 0.07978
181 0.1221 0.07562
182 0.1201 0.07368
183 0.1165 0.06990
184 0.1146 0.06801
185 0.1124 0.06611
186 0.1078 0.06242
187 0.1060 0.06064
188 0.1023 0.05715
189 0.1007 0.05543
190 0.09753 0.05219
191 0.09483 0.04900
192 0.09532 0.04744
193 0.09214 0.04427
194 0.09048 0.04273
195 0.08333 0.03976
196 0.08207 0.03828
197 0.07784 0.03544
198 0.07242 0.03277
199 0.07039 0.03153
200 0.06594 0.02924
201 0.06261 0.02716
202 0.06121 0.02613
203 0.05835 0.02422
204 0.05104 0.02242
205 0.04961 0.02154
206 0.04582 0.01982
207 0.04319 0.01821
208 0.04197 0.01746
209 0.03967 0.01601
210 0.03758 0.01470
211 0.03557 0.01353
212 0.03466 0.01299
213 0.03275 0.01189
214 0.03092 0.01086
215 0.02517 0.009886
216 0.02347 0.009019
217 0.02173 0.008174
218 0.02082 0.007748
219 0.01921 0.006984
220 0.01760 0.006288
221 0.01622 0.005647
222 0.01498 0.005039
223 0.01375 0.004458
224 0.01266 0.003923
225 0.01167 0.003448
226 0.01119 0.003227
227 0.01026 0.002811
228 0.009419 0.002440
229 0.008637 0.002107
230 0.007970 0.001804
231 0.007432 0.001576
232 0.007010 0.001395
233 0.006617 0.001221
234 0.006284 0.001079
235 0.005975 0.0009486
236 0.005714 0.0008240
237 0.005476 0.0007225
238 0.005244 0.0006360
239 0.004883 0.0005227
240 0.004704 0.0004684
241 0.004557 0.0004215
242 0.004457 0.0003841
243 0.004374 0.0003530
244 0.004282 0.0003197
245 0.004190 0.0002827
246 0.004089 0.0002464
247 0.003977 0.0002030
248 0.003929 0.0001812
249 0.003860 0.0001587
250 0.003800 0.0001406
251 0.003774 0.0001290
252 0.003751 0.0001180
253 0.003738 0.0001123
254 0.003736 0.0001076
255 0.003739 0.0001019

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,260 @@
# This file shows results of an evaluation of saliencymaps as described in
# R. Achanta, S. Hemami, F. Estrada and S. Süsstrunk, Frequency-tuned Salient Region Detection, IEEE International Conference on Computer Vision and Pattern Recognition (CVPR), 2009.
#
# threshold mean_precision mean_recall
0 0.1989 1.000
1 0.1994 1.000
2 0.1994 1.000
3 0.1994 1.000
4 0.1994 1.000
5 0.1994 1.000
6 0.1994 1.000
7 0.1994 1.000
8 0.1994 1.000
9 0.1994 1.000
10 0.1994 1.000
11 0.1994 1.000
12 0.1994 1.000
13 0.1994 1.000
14 0.2027 1.000
15 0.2027 1.000
16 0.2027 1.000
17 0.2027 1.000
18 0.2027 1.000
19 0.2027 1.000
20 0.2027 1.000
21 0.2027 1.000
22 0.2027 1.000
23 0.2085 0.9998
24 0.2085 0.9998
25 0.2085 0.9998
26 0.2085 0.9998
27 0.2085 0.9998
28 0.2085 0.9998
29 0.2160 0.9993
30 0.2160 0.9993
31 0.2160 0.9993
32 0.2160 0.9993
33 0.2160 0.9993
34 0.2160 0.9993
35 0.2253 0.9983
36 0.2253 0.9983
37 0.2253 0.9983
38 0.2253 0.9983
39 0.2364 0.9966
40 0.2364 0.9966
41 0.2364 0.9966
42 0.2364 0.9966
43 0.2495 0.9940
44 0.2495 0.9940
45 0.2495 0.9940
46 0.2495 0.9940
47 0.2645 0.9902
48 0.2645 0.9902
49 0.2645 0.9902
50 0.2645 0.9902
51 0.2814 0.9850
52 0.2814 0.9850
53 0.2814 0.9850
54 0.2997 0.9781
55 0.2997 0.9781
56 0.2997 0.9781
57 0.3196 0.9697
58 0.3196 0.9697
59 0.3196 0.9697
60 0.3406 0.9594
61 0.3406 0.9594
62 0.3624 0.9475
63 0.3624 0.9475
64 0.3624 0.9475
65 0.3850 0.9341
66 0.3850 0.9341
67 0.4084 0.9190
68 0.4084 0.9190
69 0.4084 0.9190
70 0.4327 0.9025
71 0.4327 0.9025
72 0.4575 0.8849
73 0.4575 0.8849
74 0.4830 0.8659
75 0.4830 0.8659
76 0.5083 0.8454
77 0.5083 0.8454
78 0.5335 0.8235
79 0.5335 0.8235
80 0.5583 0.8003
81 0.5583 0.8003
82 0.5827 0.7768
83 0.5827 0.7768
84 0.6057 0.7526
85 0.6057 0.7526
86 0.6272 0.7276
87 0.6479 0.7020
88 0.6479 0.7020
89 0.6665 0.6758
90 0.6665 0.6758
91 0.6834 0.6495
92 0.6834 0.6495
93 0.6989 0.6227
94 0.7152 0.5954
95 0.7152 0.5954
96 0.7293 0.5680
97 0.7341 0.5401
98 0.7341 0.5401
99 0.7457 0.5125
100 0.7556 0.4851
101 0.7556 0.4851
102 0.7641 0.4583
103 0.7719 0.4320
104 0.7719 0.4320
105 0.7749 0.4068
106 0.7816 0.3824
107 0.7885 0.3585
108 0.7885 0.3585
109 0.7910 0.3349
110 0.7970 0.3117
111 0.8036 0.2893
112 0.8036 0.2893
113 0.8044 0.2680
114 0.8059 0.2477
115 0.8098 0.2284
116 0.7974 0.2100
117 0.7974 0.2100
118 0.7907 0.1929
119 0.7832 0.1764
120 0.7773 0.1610
121 0.7585 0.1471
122 0.7478 0.1341
123 0.7211 0.1220
124 0.7211 0.1220
125 0.7023 0.1104
126 0.6731 0.09981
127 0.6650 0.08986
128 0.6415 0.08053
129 0.6207 0.07185
130 0.6115 0.06379
131 0.5821 0.05638
132 0.5494 0.04991
133 0.5180 0.04407
134 0.4956 0.03875
135 0.4683 0.03425
136 0.4451 0.03033
137 0.4103 0.02693
138 0.3940 0.02399
139 0.3538 0.02146
140 0.3060 0.01925
141 0.2665 0.01734
142 0.2385 0.01560
143 0.2187 0.01400
144 0.2159 0.01254
145 0.1938 0.01135
146 0.1741 0.01028
147 0.1618 0.009347
148 0.1452 0.008531
149 0.1155 0.007042
150 0.1143 0.006452
151 0.1019 0.005904
152 0.09032 0.005338
153 0.07338 0.004777
154 0.06947 0.004218
155 0.06948 0.003705
156 0.04997 0.002711
157 0.04216 0.002285
158 0.03829 0.001918
159 0.03834 0.001625
160 0.02684 0.001183
161 0.02697 0.0009914
162 0.02712 0.0008137
163 0.02338 0.0006682
164 0.02344 0.0004428
165 0.01953 0.0003665
166 0.01563 0.0003229
167 0.01172 0.0002907
168 0.007813 0.0002362
169 0.007813 0.0002196
170 0.007813 0.0001995
171 0.007813 0.0001575
172 0.007813 0.0001427
173 0.007813 0.0001233
174 0.003906 9.333e-05
175 0.003906 8.022e-05
176 0.003906 4.929e-05
177 0.003906 3.461e-05
178 0.003906 2.097e-05
179 0.000 0.000
180 0.000 0.000
181 0.000 0.000
182 0.000 0.000
183 0.000 0.000
184 0.000 0.000
185 0.000 0.000
186 0.000 0.000
187 0.000 0.000
188 0.000 0.000
189 0.000 0.000
190 0.000 0.000
191 0.000 0.000
192 0.000 0.000
193 0.000 0.000
194 0.000 0.000
195 0.000 0.000
196 0.000 0.000
197 0.000 0.000
198 0.000 0.000
199 0.000 0.000
200 0.000 0.000
201 0.000 0.000
202 0.000 0.000
203 0.000 0.000
204 0.000 0.000
205 0.000 0.000
206 0.000 0.000
207 0.000 0.000
208 0.000 0.000
209 0.000 0.000
210 0.000 0.000
211 0.000 0.000
212 0.000 0.000
213 0.000 0.000
214 0.000 0.000
215 0.000 0.000
216 0.000 0.000
217 0.000 0.000
218 0.000 0.000
219 0.000 0.000
220 0.000 0.000
221 0.000 0.000
222 0.000 0.000
223 0.000 0.000
224 0.000 0.000
225 0.000 0.000
226 0.000 0.000
227 0.000 0.000
228 0.000 0.000
229 0.000 0.000
230 0.000 0.000
231 0.000 0.000
232 0.000 0.000
233 0.000 0.000
234 0.000 0.000
235 0.000 0.000
236 0.000 0.000
237 0.000 0.000
238 0.000 0.000
239 0.000 0.000
240 0.000 0.000
241 0.000 0.000
242 0.000 0.000
243 0.000 0.000
244 0.000 0.000
245 0.000 0.000
246 0.000 0.000
247 0.000 0.000
248 0.000 0.000
249 0.000 0.000
250 0.000 0.000
251 0.000 0.000
252 0.000 0.000
253 0.000 0.000
254 0.000 0.000
255 0.000 0.000

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,260 @@
# This file shows results of an evaluation of saliencymaps as described in
# R. Achanta, S. Hemami, F. Estrada and S. Süsstrunk, Frequency-tuned Salient Region Detection, IEEE International Conference on Computer Vision and Pattern Recognition (CVPR), 2009.
#
# threshold mean_precision mean_recall
0 0.1989 1.000
1 0.1989 1.000
2 0.1989 1.000
3 0.1989 1.000
4 0.1989 1.000
5 0.1989 1.000
6 0.1989 1.000
7 0.1989 1.000
8 0.1989 1.000
9 0.1989 1.000
10 0.1989 1.000
11 0.1989 1.000
12 0.1989 1.000
13 0.1989 1.000
14 0.1991 1.000
15 0.1991 1.000
16 0.1991 1.000
17 0.1991 1.000
18 0.1991 1.000
19 0.1991 1.000
20 0.1991 1.000
21 0.1991 1.000
22 0.1991 1.000
23 0.1995 1.000
24 0.1995 1.000
25 0.1995 1.000
26 0.1995 1.000
27 0.1995 1.000
28 0.1995 1.000
29 0.2001 1.000
30 0.2001 1.000
31 0.2001 1.000
32 0.2001 1.000
33 0.2001 1.000
34 0.2001 1.000
35 0.2008 1.000
36 0.2008 1.000
37 0.2008 1.000
38 0.2008 1.000
39 0.2016 1.000
40 0.2016 1.000
41 0.2016 1.000
42 0.2016 1.000
43 0.2027 1.000
44 0.2027 1.000
45 0.2027 1.000
46 0.2027 1.000
47 0.2038 1.000
48 0.2038 1.000
49 0.2038 1.000
50 0.2038 1.000
51 0.2051 1.000
52 0.2051 1.000
53 0.2051 1.000
54 0.2065 0.9999
55 0.2065 0.9999
56 0.2065 0.9999
57 0.2080 0.9999
58 0.2080 0.9999
59 0.2080 0.9999
60 0.2097 0.9999
61 0.2097 0.9999
62 0.2114 0.9999
63 0.2114 0.9999
64 0.2114 0.9999
65 0.2133 0.9998
66 0.2133 0.9998
67 0.2154 0.9998
68 0.2154 0.9998
69 0.2154 0.9998
70 0.2175 0.9997
71 0.2175 0.9997
72 0.2197 0.9996
73 0.2197 0.9996
74 0.2220 0.9995
75 0.2220 0.9995
76 0.2244 0.9993
77 0.2244 0.9993
78 0.2269 0.9992
79 0.2269 0.9992
80 0.2294 0.9990
81 0.2294 0.9990
82 0.2321 0.9988
83 0.2321 0.9988
84 0.2349 0.9985
85 0.2349 0.9985
86 0.2378 0.9983
87 0.2409 0.9980
88 0.2409 0.9980
89 0.2441 0.9976
90 0.2441 0.9976
91 0.2474 0.9972
92 0.2474 0.9972
93 0.2507 0.9968
94 0.2542 0.9963
95 0.2542 0.9963
96 0.2577 0.9958
97 0.2614 0.9952
98 0.2614 0.9952
99 0.2652 0.9945
100 0.2691 0.9938
101 0.2691 0.9938
102 0.2730 0.9930
103 0.2771 0.9921
104 0.2771 0.9921
105 0.2813 0.9911
106 0.2857 0.9901
107 0.2900 0.9890
108 0.2900 0.9890
109 0.2946 0.9879
110 0.2993 0.9866
111 0.3040 0.9854
112 0.3040 0.9854
113 0.3089 0.9839
114 0.3139 0.9825
115 0.3189 0.9809
116 0.3240 0.9793
117 0.3240 0.9793
118 0.3292 0.9777
119 0.3346 0.9760
120 0.3400 0.9742
121 0.3455 0.9724
122 0.3511 0.9706
123 0.3569 0.9686
124 0.3569 0.9686
125 0.3627 0.9666
126 0.3686 0.9646
127 0.3747 0.9624
128 0.3808 0.9603
129 0.3870 0.9580
130 0.3932 0.9557
131 0.3996 0.9533
132 0.4061 0.9508
133 0.4126 0.9482
134 0.4191 0.9456
135 0.4257 0.9429
136 0.4324 0.9400
137 0.4391 0.9371
138 0.4459 0.9341
139 0.4526 0.9309
140 0.4594 0.9277
141 0.4661 0.9244
142 0.4729 0.9210
143 0.4797 0.9176
144 0.4865 0.9140
145 0.4933 0.9103
146 0.5001 0.9066
147 0.5069 0.9028
148 0.5137 0.8989
149 0.5271 0.8906
150 0.5339 0.8863
151 0.5405 0.8819
152 0.5471 0.8775
153 0.5537 0.8729
154 0.5603 0.8684
155 0.5668 0.8637
156 0.5797 0.8540
157 0.5860 0.8490
158 0.5923 0.8439
159 0.5985 0.8389
160 0.6108 0.8284
161 0.6169 0.8230
162 0.6230 0.8176
163 0.6291 0.8121
164 0.6411 0.8009
165 0.6469 0.7951
166 0.6527 0.7892
167 0.6583 0.7832
168 0.6694 0.7710
169 0.6748 0.7648
170 0.6801 0.7586
171 0.6905 0.7457
172 0.6954 0.7392
173 0.7003 0.7325
174 0.7098 0.7188
175 0.7143 0.7118
176 0.7230 0.6974
177 0.7272 0.6902
178 0.7313 0.6828
179 0.7393 0.6677
180 0.7432 0.6601
181 0.7508 0.6447
182 0.7544 0.6370
183 0.7617 0.6213
184 0.7653 0.6134
185 0.7688 0.6055
186 0.7755 0.5895
187 0.7787 0.5813
188 0.7849 0.5650
189 0.7878 0.5568
190 0.7932 0.5402
191 0.7982 0.5234
192 0.8004 0.5149
193 0.8049 0.4981
194 0.8070 0.4896
195 0.8110 0.4728
196 0.8128 0.4643
197 0.8160 0.4473
198 0.8194 0.4305
199 0.8211 0.4223
200 0.8242 0.4057
201 0.8273 0.3893
202 0.8288 0.3810
203 0.8314 0.3644
204 0.8339 0.3481
205 0.8350 0.3401
206 0.8373 0.3243
207 0.8392 0.3089
208 0.8401 0.3014
209 0.8416 0.2866
210 0.8434 0.2725
211 0.8451 0.2586
212 0.8460 0.2518
213 0.8474 0.2386
214 0.8494 0.2259
215 0.8513 0.2138
216 0.8529 0.2023
217 0.8546 0.1912
218 0.8554 0.1858
219 0.8571 0.1752
220 0.8590 0.1651
221 0.8609 0.1553
222 0.8620 0.1461
223 0.8633 0.1371
224 0.8646 0.1285
225 0.8661 0.1202
226 0.8669 0.1162
227 0.8683 0.1085
228 0.8692 0.1011
229 0.8704 0.09405
230 0.8717 0.08729
231 0.8726 0.08097
232 0.8734 0.07490
233 0.8734 0.06913
234 0.8732 0.06368
235 0.8718 0.05852
236 0.8700 0.05363
237 0.8686 0.04907
238 0.8671 0.04482
239 0.8646 0.03888
240 0.8630 0.03522
241 0.8604 0.03175
242 0.8597 0.02854
243 0.8593 0.02549
244 0.8590 0.02264
245 0.8581 0.01990
246 0.8561 0.01733
247 0.8547 0.01369
248 0.8530 0.01148
249 0.8504 0.009392
250 0.8486 0.007355
251 0.8489 0.005578
252 0.8459 0.003268
253 0.8451 0.001962
254 0.8415 0.001033
255 0.8397 0.0003618

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,260 @@
# This file shows results of an evaluation of saliencymaps as described in
# R. Achanta, S. Hemami, F. Estrada and S. Süsstrunk, Frequency-tuned Salient Region Detection, IEEE International Conference on Computer Vision and Pattern Recognition (CVPR), 2009.
#
# threshold mean_precision mean_recall
0 0.1989 1.000
1 0.1989 1.000
2 0.1989 1.000
3 0.1989 1.000
4 0.1989 1.000
5 0.1989 1.000
6 0.1989 1.000
7 0.1989 1.000
8 0.1989 1.000
9 0.1989 1.000
10 0.1989 1.000
11 0.1989 1.000
12 0.1989 1.000
13 0.1989 1.000
14 0.1990 1.000
15 0.1990 1.000
16 0.1990 1.000
17 0.1990 1.000
18 0.1990 1.000
19 0.1990 1.000
20 0.1990 1.000
21 0.1990 1.000
22 0.1990 1.000
23 0.1993 1.000
24 0.1993 1.000
25 0.1993 1.000
26 0.1993 1.000
27 0.1993 1.000
28 0.1993 1.000
29 0.1996 1.000
30 0.1996 1.000
31 0.1996 1.000
32 0.1996 1.000
33 0.1996 1.000
34 0.1996 1.000
35 0.2001 1.000
36 0.2001 1.000
37 0.2001 1.000
38 0.2001 1.000
39 0.2007 1.000
40 0.2007 1.000
41 0.2007 1.000
42 0.2007 1.000
43 0.2014 1.000
44 0.2014 1.000
45 0.2014 1.000
46 0.2014 1.000
47 0.2022 1.000
48 0.2022 1.000
49 0.2022 1.000
50 0.2022 1.000
51 0.2032 0.9999
52 0.2032 0.9999
53 0.2032 0.9999
54 0.2043 0.9999
55 0.2043 0.9999
56 0.2043 0.9999
57 0.2056 0.9999
58 0.2056 0.9999
59 0.2056 0.9999
60 0.2070 0.9998
61 0.2070 0.9998
62 0.2085 0.9998
63 0.2085 0.9998
64 0.2085 0.9998
65 0.2101 0.9997
66 0.2101 0.9997
67 0.2120 0.9996
68 0.2120 0.9996
69 0.2120 0.9996
70 0.2139 0.9995
71 0.2139 0.9995
72 0.2160 0.9994
73 0.2160 0.9994
74 0.2182 0.9992
75 0.2182 0.9992
76 0.2205 0.9991
77 0.2205 0.9991
78 0.2229 0.9989
79 0.2229 0.9989
80 0.2255 0.9987
81 0.2255 0.9987
82 0.2282 0.9985
83 0.2282 0.9985
84 0.2310 0.9982
85 0.2310 0.9982
86 0.2340 0.9980
87 0.2371 0.9977
88 0.2371 0.9977
89 0.2402 0.9974
90 0.2402 0.9974
91 0.2435 0.9970
92 0.2435 0.9970
93 0.2469 0.9966
94 0.2503 0.9962
95 0.2503 0.9962
96 0.2539 0.9957
97 0.2577 0.9952
98 0.2577 0.9952
99 0.2616 0.9946
100 0.2655 0.9939
101 0.2655 0.9939
102 0.2696 0.9932
103 0.2739 0.9925
104 0.2739 0.9925
105 0.2783 0.9917
106 0.2828 0.9909
107 0.2873 0.9900
108 0.2873 0.9900
109 0.2920 0.9891
110 0.2969 0.9881
111 0.3018 0.9871
112 0.3018 0.9871
113 0.3069 0.9862
114 0.3122 0.9851
115 0.3176 0.9840
116 0.3231 0.9828
117 0.3231 0.9828
118 0.3287 0.9815
119 0.3344 0.9802
120 0.3402 0.9789
121 0.3461 0.9775
122 0.3520 0.9761
123 0.3580 0.9745
124 0.3580 0.9745
125 0.3640 0.9729
126 0.3702 0.9712
127 0.3766 0.9695
128 0.3830 0.9676
129 0.3895 0.9658
130 0.3961 0.9639
131 0.4027 0.9619
132 0.4094 0.9599
133 0.4162 0.9579
134 0.4230 0.9558
135 0.4299 0.9536
136 0.4369 0.9514
137 0.4439 0.9491
138 0.4509 0.9467
139 0.4580 0.9443
140 0.4651 0.9418
141 0.4722 0.9392
142 0.4793 0.9366
143 0.4864 0.9338
144 0.4936 0.9310
145 0.5008 0.9281
146 0.5080 0.9252
147 0.5152 0.9222
148 0.5224 0.9191
149 0.5368 0.9128
150 0.5438 0.9094
151 0.5510 0.9061
152 0.5581 0.9026
153 0.5652 0.8992
154 0.5723 0.8956
155 0.5793 0.8920
156 0.5932 0.8846
157 0.5999 0.8808
158 0.6066 0.8770
159 0.6131 0.8730
160 0.6258 0.8649
161 0.6320 0.8608
162 0.6382 0.8565
163 0.6444 0.8523
164 0.6565 0.8435
165 0.6623 0.8390
166 0.6681 0.8345
167 0.6738 0.8298
168 0.6849 0.8203
169 0.6903 0.8154
170 0.6955 0.8105
171 0.7058 0.8004
172 0.7107 0.7953
173 0.7156 0.7900
174 0.7250 0.7794
175 0.7295 0.7741
176 0.7383 0.7632
177 0.7425 0.7576
178 0.7467 0.7519
179 0.7549 0.7403
180 0.7590 0.7343
181 0.7667 0.7222
182 0.7705 0.7161
183 0.7778 0.7036
184 0.7814 0.6973
185 0.7849 0.6911
186 0.7920 0.6785
187 0.7955 0.6722
188 0.8023 0.6594
189 0.8057 0.6531
190 0.8123 0.6404
191 0.8188 0.6273
192 0.8220 0.6207
193 0.8279 0.6074
194 0.8307 0.6007
195 0.8359 0.5870
196 0.8385 0.5800
197 0.8432 0.5658
198 0.8475 0.5513
199 0.8495 0.5440
200 0.8535 0.5293
201 0.8569 0.5146
202 0.8586 0.5073
203 0.8619 0.4923
204 0.8649 0.4772
205 0.8663 0.4696
206 0.8691 0.4544
207 0.8717 0.4392
208 0.8729 0.4316
209 0.8754 0.4165
210 0.8778 0.4013
211 0.8800 0.3861
212 0.8811 0.3784
213 0.8833 0.3631
214 0.8856 0.3481
215 0.8877 0.3332
216 0.8896 0.3185
217 0.8913 0.3037
218 0.8921 0.2964
219 0.8938 0.2819
220 0.8954 0.2676
221 0.8968 0.2534
222 0.8981 0.2392
223 0.8992 0.2252
224 0.9001 0.2116
225 0.9010 0.1983
226 0.9014 0.1918
227 0.9023 0.1792
228 0.9031 0.1673
229 0.9038 0.1558
230 0.9044 0.1449
231 0.9053 0.1347
232 0.9065 0.1250
233 0.9072 0.1155
234 0.9076 0.1066
235 0.9075 0.09809
236 0.9067 0.08995
237 0.9066 0.08229
238 0.9063 0.07512
239 0.9052 0.06512
240 0.9051 0.05904
241 0.9048 0.05330
242 0.9047 0.04790
243 0.9043 0.04277
244 0.9036 0.03787
245 0.9017 0.03327
246 0.9011 0.02900
247 0.9004 0.02321
248 0.8996 0.01976
249 0.8990 0.01643
250 0.8983 0.01345
251 0.8964 0.01070
252 0.8951 0.006874
253 0.8944 0.004407
254 0.8948 0.002368
255 0.8955 0.0008420

View File

@ -0,0 +1,27 @@
import argparse
import os
import subprocess
def batch():
"""
Performs a batch call to the saliency system.
"""
parser = argparse.ArgumentParser(description="Calls the saliency system")
parser.add_argument("input", metavar="input", type=str, help="The directory of the input images.")
parser.add_argument("output", metavar="output", type=str, help="The directory of the saliency maps.")
parser.add_argument("saliency", metavar="saliency", type=str, help="The path to the saliency tool.")
args = parser.parse_args()
input_dir = os.fsencode(args.input)
for file in os.listdir(input_dir):
filename = os.fsdecode(file)
base_filename, ext = os.path.splitext(filename)
input_filename = os.path.join(args.input, filename)
output_filename = os.path.join(args.output, base_filename + "_saliency.png")
subprocess.run([args.saliency, input_filename, output_filename, "0"], stderr=subprocess.PIPE, check=True)
if __name__ == "__main__":
batch()

View File

@ -0,0 +1,5 @@
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
project(sheet1)
add_subdirectory(basics)
add_subdirectory(opencv)

View File

@ -0,0 +1,25 @@
//
// Created by jim on 4/4/17.
//
#include <iostream>
using namespace std;
int main()
{
int input;
cout << "Bitte geben Sie eine Zahl ein." << endl;
cin >> input;
if (input > 9)
{
cout << input << " ist größer gleich 10." << endl;
}
else if (input >= 0)
{
cout << input << " liegt zwischen einschließlich 0 und 9." << endl;
}
else
{
cout << input << " ist negativ." << endl;
}
return 0;
}

View File

@ -0,0 +1,5 @@
add_library(Rectangle Rectangle.cpp)
add_executable(main main.cpp)
target_link_libraries(main Rectangle)
add_executable(hello hello.cpp)
add_executable(AskInteger AskInteger.cpp)

View File

@ -0,0 +1,17 @@
//
// Created by jim on 4/4/17.
//
#include <iostream>
#include "Rectangle.h"
using namespace std;
Rectangle::Rectangle(unsigned int width, unsigned int height)
{
this->width = width;
this->height = height;
}
unsigned int Rectangle::area()
{
cout << this->width * this->height << endl;
}

View File

@ -0,0 +1,19 @@
//
// Created by jim on 4/4/17.
//
#ifndef SHEET1_RECTANGLE_H
#define SHEET1_RECTANGLE_H
class Rectangle
{
private:
unsigned int width;
unsigned int height;
public:
Rectangle(unsigned int, unsigned int);
unsigned int area();
};
#endif //SHEET1_RECTANGLE_H

View File

@ -0,0 +1,12 @@
//
// Created by jim on 4/4/17.
//
#include <iostream>
#include <string>
using namespace std;
int main()
{
std::cout << "Hello world!";
return 0;
}

View File

@ -0,0 +1,11 @@
//
// Created by jim on 4/4/17.
//
#include "Rectangle.h"
int main()
{
Rectangle rec = Rectangle(20, 10);
rec.area();
return 0;
}

View File

@ -0,0 +1,5 @@
find_package( OpenCV REQUIRED )
add_executable(displayImage displayImage.cpp)
add_executable(loadModifySave loadModifySaveImage.cpp)
target_link_libraries( displayImage ${OpenCV_LIBS} )
target_link_libraries( loadModifySave ${OpenCV_LIBS} )

View File

@ -0,0 +1,31 @@
//
// Created by jim on 4/4/17.
//
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
{
if ( argc != 2 )
{
printf("usage: DisplayImage.out <Image_Path>\n");
return -1;
}
Mat image;
image = imread( argv[1], 1 );
if ( !image.data )
{
printf("No image data \n");
return -1;
}
namedWindow("Display Image", WINDOW_AUTOSIZE );
imshow("Display Image", image);
waitKey(0);
return 0;
}

View File

@ -0,0 +1,35 @@
//
// Created by jim on 4/7/17.
//
#include <opencv2/opencv.hpp>
using namespace cv;
int main( int argc, char** argv )
{
char* imageName = argv[1];
Mat image;
image = imread( imageName, 1 );
if( argc != 2 || !image.data )
{
printf( " No image data \n " );
return -1;
}
Mat gray_image;
cvtColor( image, gray_image, CV_BGR2GRAY );
imwrite( "Gray_Image.jpg", gray_image );
namedWindow( imageName, CV_WINDOW_NORMAL );
namedWindow( "Gray image", CV_WINDOW_NORMAL);
imshow( imageName, image );
imshow( "Gray image", gray_image );
waitKey(0);
return 0;
}

View File

@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 3.5)
project(sheet2)
set(CMAKE_CXX_STANDARD 11)
find_package( OpenCV REQUIRED )
add_executable(sheet2 main.cpp)
target_link_libraries(sheet2 ${OpenCV_LIBS})

38
ccv/sheet2/main.cpp Normal file
View File

@ -0,0 +1,38 @@
#include <stdio.h>
#include <opencv2/opencv.hpp>
int main()
{
// exercise 1
float g[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
cv::Mat M(4, 4, CV_8UC1, g);
std::cout << M << std::endl << std::endl;
// exercise 2
M.at<uchar>(1, 2) = 100;
std::cout << M << std::endl << std::endl;
// exercise 3
std::cout << "The elements of the matrix: ";
for (int row = 0; row < M.rows; ++row)
{
for (int col = 0; col < M.cols; ++col)
{
if (row != 0 || col != 0)
{
std::cout << ",";
}
std::cout << " " << static_cast<int>(M.at<uchar>(row, col));
}
}
std::cout << std::endl << std::endl;
//exercise 4
cv::Mat K(M);
K.at<uchar>(1, 2) = 200;
std::cout << "M: " << M << std::endl << "K: " << K << std::endl << std::endl;
//exercise 5
cv::Mat B = cv::Mat(400, 400, CV_8UC3, cv::Scalar(255, 0, 0));
cv::namedWindow("Display Image", cv::WINDOW_FULLSCREEN);
cv::imshow("Display Image", B);
cv::waitKey(0);
return 0;
}

15
ccv/sheet3/CMakeLists.txt Normal file
View File

@ -0,0 +1,15 @@
cmake_minimum_required(VERSION 3.5)
project(sheet3)
set(CMAKE_CXX_STANDARD 11)
find_package( OpenCV REQUIRED )
add_executable(sheet3 main.cpp)
add_executable(sheet3-exercise1 exercise1.cpp)
add_executable(sheet3-exercise3 exercise3.cpp)
add_executable(sheet3-exercise4 gauss_pyramid.cpp lab_pyramid.cpp exercise4.cpp)
target_link_libraries(sheet3 ${OpenCV_LIBS})
target_link_libraries(sheet3-exercise1 ${OpenCV_LIBS})
target_link_libraries(sheet3-exercise3 ${OpenCV_LIBS})
target_link_libraries(sheet3-exercise4 ${OpenCV_LIBS})

BIN
ccv/sheet3/DSC09506.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 692 KiB

44
ccv/sheet3/exercise1.cpp Normal file
View File

@ -0,0 +1,44 @@
#include <opencv2/opencv.hpp>
int main(int argc, char** argv ) {
// exercise 1
// matrix M
float m[] = {1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0};
cv::Mat M(3, 3, CV_32FC1, m);
// gaussian filter kernel
float g[] = {1, 2, 1, 2, 4, 2, 1, 2, 1};
cv::Mat G(3, 3, CV_32FC1, g);
G = G * 0.0625;
// output G
std::cout << G << std::endl << std::endl;
// convolve 1.
cv::Mat M_1;
cv::filter2D(M, M_1, -1, G, cv::Point(-1, -1), 0, cv::BORDER_CONSTANT);
// output M_1
std::cout << M_1 << std::endl << std::endl;
// convolve 2.
float g_1[] = {1, 2, 1};
cv::Mat G_1(1, 3, CV_32FC1, g_1);
G_1 = G_1 * 0.25;
float g_2[] = {1, 2, 1};
cv::Mat G_2(3, 1, CV_32FC1, g_2);
G_2 = G_2 * 0.25;
// output G_1, G_2
std::cout << G_1 << std::endl << std::endl;
std::cout << G_2 << std::endl << std::endl;
cv::Mat M_2;
cv::Mat M_3;
cv::filter2D(M, M_2, -1, G_1, cv::Point(-1, -1), 0, cv::BORDER_CONSTANT);
cv::filter2D(M_2, M_3, -1, G_2, cv::Point(-1, -1), 0, cv::BORDER_CONSTANT);
// output M_3
std::cout << M_3 << std::endl << std::endl;
// convolve 3.
cv::Mat M_4;
cv::GaussianBlur(M, M_4, cv::Size(3, 3), 0, 0, cv::BORDER_CONSTANT);
std::cout << M_4 << std::endl << std::endl;
}

66
ccv/sheet3/exercise3.cpp Normal file
View File

@ -0,0 +1,66 @@
#include <opencv2/opencv.hpp>
int main(int argc, char** argv ) {
if ( argc != 2 )
{
printf("usage: <Image_Path>\n");
return -1;
}
cv::Mat image;
image = cv::imread(argv[1], cv::ImreadModes::IMREAD_COLOR);
cv::Mat image_gray;
cv::cvtColor(image, image_gray, cv::COLOR_BGR2GRAY);
cv::Mat image_float;
image_gray.convertTo(image_float, CV_32F);
cv::Mat image_write;
cv::Mat G_1;
cv::Mat G_2;
cv::GaussianBlur(image_float, G_1, cv::Size(3, 3), 3, 3, cv::BORDER_CONSTANT);
cv::GaussianBlur(image_float, G_2, cv::Size(3, 3), 11, 11, cv::BORDER_CONSTANT);
cv::Mat image_filtered = G_1 - G_2;
cv::imshow("Filtered (3 - 11)", image_filtered);
image_write = image_filtered * 255;
cv::imwrite("Filter-3-11.jpg", image_write);
cv::waitKey(0);
cv::GaussianBlur(image_float, G_1, cv::Size(3, 3), 3, 3, cv::BORDER_CONSTANT);
cv::GaussianBlur(image_float, G_2, cv::Size(3, 3), 7, 7, cv::BORDER_CONSTANT);
image_filtered = G_1 - G_2;
cv::imshow("Filtered (3 - 7)", image_filtered);
image_write = image_filtered * 255;
cv::imwrite("Filter-3-7.jpg", image_write);
cv::waitKey(0);
cv::GaussianBlur(image_float, G_1, cv::Size(3, 3), 5, 5, cv::BORDER_CONSTANT);
cv::GaussianBlur(image_float, G_2, cv::Size(3, 3), 7, 7, cv::BORDER_CONSTANT);
image_filtered = G_1 - G_2;
cv::imshow("Filtered (5 - 7)", image_filtered);
image_write = image_filtered * 255;
cv::imwrite("Filter-5-7.jpg", image_write);
cv::waitKey(0);
cv::GaussianBlur(image_float, G_1, cv::Size(3, 3), 11, 11, cv::BORDER_CONSTANT);
cv::GaussianBlur(image_float, G_2, cv::Size(3, 3), 3, 3, cv::BORDER_CONSTANT);
image_filtered = G_1 - G_2;
image_float.convertTo(image_gray, CV_8U);
cv::imshow("Filtered (11 - 3)", image_filtered);
image_write = image_filtered * 255;
cv::imwrite("Filter-11-3.jpg", image_write);
cv::waitKey(0);
cv::GaussianBlur(image_float, G_1, cv::Size(3, 3), 9, 9, cv::BORDER_CONSTANT);
cv::GaussianBlur(image_float, G_2, cv::Size(3, 3), 5, 5, cv::BORDER_CONSTANT);
image_filtered = G_1 - G_2;
cv::imshow("Filtered (9 - 5)", image_filtered);
image_write = image_filtered * 255;
cv::imwrite("Filter-9-5.jpg", image_write);
cv::waitKey(0);
}

35
ccv/sheet3/exercise4.cpp Normal file
View File

@ -0,0 +1,35 @@
#include "lab_pyramid.h"
int main(int argc, char** argv ) {
if ( argc != 2 )
{
printf("usage: <Image_Path>\n");
return -1;
}
lab_pyramid pyramid = lab_pyramid(argv[1]);
const int number_of_layers = 5;
pyramid.create_pyramids(number_of_layers);
gauss_pyramid l_pyr = pyramid.get_pyramid(lab_pyramid::COLOR_L);
gauss_pyramid a_pyr = pyramid.get_pyramid(lab_pyramid::COLOR_A);
gauss_pyramid b_pyr = pyramid.get_pyramid(lab_pyramid::COLOR_B);
for (int i = 0; i < number_of_layers; i++)
{
cv::imshow("Channel: L, Layer:" + std::to_string(i), l_pyr.get(i));
cv::waitKey(0);
}
for (int i = 0; i < number_of_layers; i++)
{
cv::imshow("Channel: A, Layer:" + std::to_string(i), a_pyr.get(i));
cv::waitKey(0);
}
for (int i = 0; i < number_of_layers; i++)
{
cv::imshow("Channel: B, Layer:" + std::to_string(i), b_pyr.get(i));
cv::waitKey(0);
}
return 0;
}

View File

@ -0,0 +1,21 @@
#include "gauss_pyramid.h"
gauss_pyramid::gauss_pyramid() {}
gauss_pyramid::gauss_pyramid(cv::Mat img, int number_of_layers)
{
_layers.push_back(img);
cv::Mat blurredImage;
cv::Mat resizedImage = img;
for (int i = 1; i < number_of_layers; i++)
{
cv::GaussianBlur(resizedImage, blurredImage, cv::Size(5, 5), 0, 0, cv::BORDER_CONSTANT);
cv::resize(blurredImage, resizedImage, cv::Size(), 0.5, 0.5, cv::INTER_NEAREST);
_layers.push_back(resizedImage);
}
}
cv::Mat gauss_pyramid::get(int layer)
{
return _layers.at((unsigned long) layer);
}

View File

@ -0,0 +1,17 @@
#ifndef SHEET3_GAUSS_PYRAMID_H
#define SHEET3_GAUSS_PYRAMID_H
#include <opencv2/opencv.hpp>
class gauss_pyramid
{
private:
std::vector<cv::Mat> _layers;
public:
gauss_pyramid();
gauss_pyramid(cv::Mat img, int number_of_layers);
cv::Mat get(int layer);
};
#endif //SHEET3_GAUSS_PYRAMID_H

View File

@ -0,0 +1,29 @@
#include "lab_pyramid.h"
lab_pyramid::lab_pyramid(cv::String image_filename) {
cv::Mat image_rgb = cv::imread(image_filename, cv::IMREAD_COLOR);
cv::cvtColor(image_rgb, _inputImage_lab, cv::COLOR_RGB2Lab);
cv::split(_inputImage_lab ,_imageChannels);
};
void lab_pyramid::create_pyramids(int number_of_layers)
{
_pyramids[COLOR_L] = gauss_pyramid(_imageChannels[COLOR_L], number_of_layers);
_pyramids[COLOR_A] = gauss_pyramid(_imageChannels[COLOR_A], number_of_layers);
_pyramids[COLOR_B] = gauss_pyramid(_imageChannels[COLOR_B], number_of_layers);
}
gauss_pyramid lab_pyramid::get_pyramid(int channel)
{
switch (channel)
{
case COLOR_L:
return _pyramids[COLOR_L];
case COLOR_A:
return _pyramids[COLOR_A];
case COLOR_B:
return _pyramids[COLOR_B];
default:
throw std::invalid_argument( "received invalid channel value, use COLOR_L, COLOR_A or COLOR_B" );
}
}

41
ccv/sheet3/lab_pyramid.h Normal file
View File

@ -0,0 +1,41 @@
#ifndef SHEET3_LAB_PYRAMID_H
#define SHEET3_LAB_PYRAMID_H
#include <opencv2/opencv.hpp>
#include "gauss_pyramid.h"
class lab_pyramid {
private:
cv::Mat _inputImage_lab;
cv::Mat _imageChannels[3];
gauss_pyramid _pyramids[3];
public:
const static int COLOR_L = 0;
const static int COLOR_A = 1;
const static int COLOR_B = 2;
/**
* Initializes a LAB pyramid.
*
* @param image_filename the filename of the image that should be used
*/
lab_pyramid(cv::String image_filename);
/**
* Creates the gaussian pyramids for all channels with the given number of layers each.
*
* @param number_of_layers number of layers for gaussian pyramid
*/
void create_pyramids(int number_of_layers);
/**
* Before this method can be called, pyramids have to be created via create_pyramids.
*
* @param channel the channel you want to get (COLOR_L, COLOR_A or COLOR_B)
* @return the gaussian_pyramid for the given channel
*/
gauss_pyramid get_pyramid(int channel);
};
#endif //SHEET3_LAB_PYRAMID_H

24
ccv/sheet3/main.cpp Normal file
View File

@ -0,0 +1,24 @@
#include <opencv2/opencv.hpp>
int main(int argc, char** argv ) {
if ( argc != 2 )
{
printf("usage: main.out <Image_Path>\n");
return -1;
}
// exercise 2
cv::Mat image;
image = cv::imread(argv[1], cv::ImreadModes::IMREAD_COLOR);
int kmax = 50;
cv::Mat Matrix_convoluted;
for (int k = 3; k < kmax; k+=2) {
cv::GaussianBlur(image, Matrix_convoluted, cv::Size(k, k), 0, 0, cv::BORDER_CONSTANT);
std::string imageName = "Kernel (";
imageName = imageName + std::to_string(k) + ", " + std::to_string(k) + ")";
cv::imshow(imageName, Matrix_convoluted);
cv::waitKey(500);
}
return 0;
}

View File

@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 3.5)
project(sheet4)
set(CMAKE_CXX_STANDARD 11)
find_package( OpenCV REQUIRED )
add_executable(sheet4 gauss_pyramid.cpp lab_pyramid.cpp main.cpp)
target_link_libraries(sheet4 ${OpenCV_LIBS})

View File

@ -0,0 +1,25 @@
#include "gauss_pyramid.h"
gauss_pyramid::gauss_pyramid() {}
gauss_pyramid::gauss_pyramid(cv::Mat img, float sigma, int number_of_layers)
{
cv::Mat blurredImage;
cv::Mat resizedImage = img.clone();
for (int i = 0; i < number_of_layers; i++)
{
cv::GaussianBlur(resizedImage, blurredImage, cv::Size(0, 0), sigma, sigma, cv::BORDER_REPLICATE);
_layers.push_back(blurredImage.clone());
cv::resize(blurredImage, resizedImage, cv::Size(), 0.5, 0.5, cv::INTER_NEAREST);
}
}
cv::Mat gauss_pyramid::get(int layer)
{
return _layers.at((unsigned long) layer);
}
unsigned long gauss_pyramid::get_number_of_layers()
{
return _layers.size();
}

View File

@ -0,0 +1,18 @@
#ifndef SHEET3_GAUSS_PYRAMID_H
#define SHEET3_GAUSS_PYRAMID_H
#include <opencv2/opencv.hpp>
class gauss_pyramid
{
private:
std::vector<cv::Mat> _layers;
public:
gauss_pyramid();
gauss_pyramid(cv::Mat img, float sigma, int number_of_layers);
cv::Mat get(int layer);
unsigned long get_number_of_layers();
};
#endif //SHEET3_GAUSS_PYRAMID_H

157
ccv/sheet4/lab_pyramid.cpp Normal file
View File

@ -0,0 +1,157 @@
#include "lab_pyramid.h"
int lab_pyramid::_number_of_layers = 0;
std::vector<cv::Mat> lab_pyramid::_cs_contrast_l = std::vector<cv::Mat>();
std::vector<cv::Mat> lab_pyramid::_sc_contrast_l = std::vector<cv::Mat>();
std::vector<cv::Mat> lab_pyramid::_cs_contrast_a = std::vector<cv::Mat>();
std::vector<cv::Mat> lab_pyramid::_sc_contrast_a = std::vector<cv::Mat>();
std::vector<cv::Mat> lab_pyramid::_cs_contrast_b = std::vector<cv::Mat>();
std::vector<cv::Mat> lab_pyramid::_sc_contrast_b = std::vector<cv::Mat>();
cv::Mat lab_pyramid::_cs_F_l;
cv::Mat lab_pyramid::_sc_F_l;
cv::Mat lab_pyramid::_cs_F_a;
cv::Mat lab_pyramid::_sc_F_a;
cv::Mat lab_pyramid::_cs_F_b;
cv::Mat lab_pyramid::_sc_F_b;
lab_pyramid::lab_pyramid(cv::String image_filename) {
cv::Mat image_rgb = cv::imread(image_filename, cv::IMREAD_COLOR);
cv::cvtColor(image_rgb, _inputImage_lab, cv::COLOR_BGR2Lab);
cv::split(_inputImage_lab ,_imageChannels);
};
lab_pyramid::lab_pyramid(cv::Mat image) {
cv::cvtColor(image, _inputImage_lab, cv::COLOR_BGR2Lab);
_inputImage_lab.convertTo(_inputImage_float, CV_32F);
cv::split(_inputImage_float, _imageChannels);
}
void lab_pyramid::create_pyramids(float sigma, int number_of_layers)
{
_pyramids[COLOR_L] = gauss_pyramid(_imageChannels[COLOR_L], sigma, number_of_layers);
_pyramids[COLOR_A] = gauss_pyramid(_imageChannels[COLOR_A], sigma, number_of_layers);
_pyramids[COLOR_B] = gauss_pyramid(_imageChannels[COLOR_B], sigma, number_of_layers);
}
gauss_pyramid lab_pyramid::get_pyramid(int channel)
{
switch (channel)
{
case COLOR_L:
return _pyramids[COLOR_L];
case COLOR_A:
return _pyramids[COLOR_A];
case COLOR_B:
return _pyramids[COLOR_B];
default:
throw std::invalid_argument( "received invalid channel value, use COLOR_L, COLOR_A or COLOR_B" );
}
}
void lab_pyramid::compute_dog(lab_pyramid center, lab_pyramid surround, int number_of_layers) {
_number_of_layers = number_of_layers;
// L channel
gauss_pyramid center_l = center.get_pyramid(COLOR_L);
gauss_pyramid surround_l = surround.get_pyramid(COLOR_L);
// A channel
gauss_pyramid center_a = center.get_pyramid(COLOR_A);
gauss_pyramid surround_a = surround.get_pyramid(COLOR_A);
// A channel
gauss_pyramid center_b = center.get_pyramid(COLOR_B);
gauss_pyramid surround_b = surround.get_pyramid(COLOR_B);
for (int layer = 0; layer < number_of_layers; layer++) {
// L channel
cv::Mat center_layer_mat_L = center_l.get(layer);
cv::Mat surround_layer_mat_L = surround_l.get(layer);
cv::Mat dog_raw_cs_L = center_layer_mat_L - surround_layer_mat_L;
cv::Mat dog_final_cs_L;
cv::Mat dog_final_sc_L;
cv::threshold(dog_raw_cs_L, dog_final_cs_L, 0, 1, cv::THRESH_TOZERO);
_cs_contrast_l.push_back(dog_final_cs_L.clone());
cv::Mat dog_raw_sc_L = surround_layer_mat_L - center_layer_mat_L;
cv::threshold(dog_raw_sc_L, dog_final_sc_L, 0, 1, cv::THRESH_TOZERO);
_sc_contrast_l.push_back(dog_final_sc_L.clone());
// A channel
cv::Mat center_layer_mat_a = center_a.get(layer);
cv::Mat surround_layer_mat_a = surround_a.get(layer);
cv::Mat dog_raw_cs_a = center_layer_mat_a - surround_layer_mat_a;
cv::Mat dog_final_cs_a;
cv::Mat dog_final_sc_a;
cv::threshold(dog_raw_cs_a, dog_final_cs_a, 0, 1, cv::THRESH_TOZERO);
_cs_contrast_a.push_back(dog_final_cs_a.clone());
cv::Mat dog_raw_sc_a = surround_layer_mat_a - center_layer_mat_a;
cv::threshold(dog_raw_sc_a, dog_final_sc_a, 0, 1, cv::THRESH_TOZERO);
_sc_contrast_a.push_back(dog_final_sc_a.clone());
// B channel
cv::Mat center_layer_mat_b = center_b.get(layer);
cv::Mat surround_layer_mat_b = surround_b.get(layer);
cv::Mat dog_raw_cs_b = center_layer_mat_b - surround_layer_mat_b;
cv::Mat dog_final_cs_b;
cv::Mat dog_final_sc_b;
cv::threshold(dog_raw_cs_b, dog_final_cs_b, 0, 1, cv::THRESH_TOZERO);
_cs_contrast_b.push_back(dog_final_cs_b.clone());
cv::Mat dog_raw_sc_b = surround_layer_mat_b - center_layer_mat_b;
cv::threshold(dog_raw_sc_b, dog_final_sc_b, 0, 1, cv::THRESH_TOZERO);
_sc_contrast_b.push_back(dog_final_sc_b.clone());
}
}
void lab_pyramid::compute_feature_maps() {
_cs_F_l = across_scale_addition(_cs_contrast_l);
_sc_F_l = across_scale_addition(_sc_contrast_l);
_cs_F_a = across_scale_addition(_cs_contrast_a);
_sc_F_a = across_scale_addition(_sc_contrast_a);
_cs_F_b = across_scale_addition(_cs_contrast_b);
_sc_F_b = across_scale_addition(_sc_contrast_b);
}
cv::Mat lab_pyramid::across_scale_addition(const std::vector<cv::Mat> &scale_images) {
cv::Mat result = scale_images.front();
cv::Size original_size = scale_images.front().size();
for (unsigned long i = 1; i < scale_images.size(); i++) {
cv::Mat resized_image;
cv::resize(scale_images.at(i), resized_image, original_size, 0, 0, cv::INTER_CUBIC);
result += resized_image;
}
return result;
}
void lab_pyramid::visualize_dog() {
for (unsigned long layer = 0; layer < _number_of_layers; layer++) {
cv::namedWindow("CS L");
cv::imshow("CS L", _cs_contrast_l.at(layer));
cv::namedWindow("SC L");
cv::imshow("SC L", _sc_contrast_l.at(layer));
cv::namedWindow("CS A");
cv::imshow("CS A", _cs_contrast_a.at(layer));
cv::namedWindow("SC A");
cv::imshow("SC A", _cs_contrast_a.at(layer));
cv::namedWindow("CS B");
cv::imshow("CS B", _cs_contrast_b.at(layer));
cv::namedWindow("SC B");
cv::imshow("SC B", _cs_contrast_b.at(layer));
cv::waitKey(0);
}
}
void lab_pyramid::visualize_feature_maps() {
cv::namedWindow("CS F L");
cv::imshow("CS F L", _cs_F_l);
cv::namedWindow("CS F L");
cv::imshow("SC F L", _sc_F_l);
cv::namedWindow("CS F A");
cv::imshow("CS F A", _cs_F_a);
cv::namedWindow("SC F A");
cv::imshow("SC F A", _sc_F_a);
cv::namedWindow("CS F B");
cv::imshow("CS F B", _cs_F_b);
cv::namedWindow("CS F B");
cv::imshow("SC F B", _sc_F_b);
cv::waitKey(0);
}

97
ccv/sheet4/lab_pyramid.h Normal file
View File

@ -0,0 +1,97 @@
#ifndef SHEET3_LAB_PYRAMID_H
#define SHEET3_LAB_PYRAMID_H
#include <opencv2/opencv.hpp>
#include "gauss_pyramid.h"
class lab_pyramid {
private:
cv::Mat _inputImage_lab;
cv::Mat _inputImage_float;
cv::Mat _imageChannels[3];
gauss_pyramid _pyramids[3];
static std::vector<cv::Mat> _cs_contrast_l;
static std::vector<cv::Mat> _sc_contrast_l;
static std::vector<cv::Mat> _cs_contrast_a;
static std::vector<cv::Mat> _sc_contrast_a;
static std::vector<cv::Mat> _cs_contrast_b;
static std::vector<cv::Mat> _sc_contrast_b;
static cv::Mat _cs_F_l;
static cv::Mat _sc_F_l;
static cv::Mat _cs_F_a;
static cv::Mat _cs_F_b;
static cv::Mat _sc_F_a;
static cv::Mat _sc_F_b;
static int _number_of_layers;
public:
const static int COLOR_L = 0;
const static int COLOR_A = 1;
const static int COLOR_B = 2;
/**
* Initializes a LAB pyramid.
*
* @param image_filename the filename of the image that should be used
*/
lab_pyramid(cv::String image_filename);
/**
* Initializes a LAB pyramid.
*
* @param image the image that should be used
*/
lab_pyramid(cv::Mat image);
/**
* Creates the gaussian pyramids for all channels with the given number of layers each.
*
* @param sigma the sigma for the gaussian pyramids
* @param number_of_layers number of layers for gaussian pyramid
*/
void create_pyramids(float sigma, int number_of_layers);
/**
* Before this method can be called, pyramids have to be created via create_pyramids.
*
* @param channel the channel you want to get (COLOR_L, COLOR_A or COLOR_B)
* @return the gaussian_pyramid for the given channel
*/
gauss_pyramid get_pyramid(int channel);
/**
* Computes the center-surround and surround-center contrasts and stores them for later use.
*
* @param center the center pyramid
* @param surround the surround pyramid
* @param number_of_layers the number of layers used to create the two pyramids
*/
void static compute_dog(lab_pyramid center, lab_pyramid surround, int number_of_layers);
/**
* Visualizes the center-surround and surround-center contrasts. They have to be computed first.
*/
void static visualize_dog();
/**
* Takes the scale images, adds them up and returns the result.
*
* @param scale_images the scale images
* @return the sum of the scale images
*/
cv::Mat static across_scale_addition(const std::vector<cv::Mat>& scale_images);
/**
* Computes the feature maps.
* Has to be called after compute_dog.
*/
void static compute_feature_maps();
/**
* Visualizes the feature maps.
* Has to be called after compute_feature_maps.
*/
void static visualize_feature_maps();
};
#endif //SHEET3_LAB_PYRAMID_H

33
ccv/sheet4/main.cpp Normal file
View File

@ -0,0 +1,33 @@
#include <iostream>
#include <opencv2/opencv.hpp>
#include "lab_pyramid.h"
int main(int argc, char** argv) {
if ( argc != 2 )
{
printf("usage: <Image_Path>\n");
return -1;
}
cv::Mat image;
image = cv::imread(argv[1], cv::ImreadModes::IMREAD_COLOR);
int layers = 4;
float sigma_center = 5;
float sigma_surround = 9;
// center
lab_pyramid pyr_center = lab_pyramid(image);
pyr_center.create_pyramids(sigma_center, layers);
// surround
lab_pyramid pyr_surround = lab_pyramid(image);
pyr_surround.create_pyramids(sigma_surround, layers);
lab_pyramid::compute_dog(pyr_center, pyr_surround, layers);
lab_pyramid::visualize_dog();
lab_pyramid::compute_feature_maps();
lab_pyramid::visualize_feature_maps();
return 0;
}

View File

@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 3.5)
project(sheet5)
set(CMAKE_CXX_STANDARD 11)
find_package( OpenCV REQUIRED )
add_executable(sheet5 gauss_pyramid.cpp laplacian_pyramid.cpp oriented_pyramid.cpp main.cpp)
target_link_libraries(sheet5 ${OpenCV_LIBS})

View File

@ -0,0 +1,35 @@
#include "gauss_pyramid.h"
gauss_pyramid::gauss_pyramid() {}
gauss_pyramid::gauss_pyramid(cv::Mat img, float sigma, int number_of_layers)
{
cv::Mat blurredImage;
cv::Mat resizedImage = img.clone();
for (int i = 0; i < number_of_layers; i++)
{
cv::GaussianBlur(resizedImage, blurredImage, cv::Size(0, 0), sigma, sigma, cv::BORDER_REPLICATE);
_layers.push_back(blurredImage.clone());
cv::resize(blurredImage, resizedImage, cv::Size(), 0.5, 0.5, cv::INTER_NEAREST);
}
}
cv::Mat gauss_pyramid::get(int layer) const
{
return _layers.at((unsigned long) layer);
}
cv::Mat gauss_pyramid::get(int layer)
{
return _layers.at((unsigned long) layer);
}
unsigned long gauss_pyramid::get_number_of_layers() const
{
return _layers.size();
}
unsigned long gauss_pyramid::get_number_of_layers()
{
return _layers.size();
}

Some files were not shown because too many files have changed in this diff Show More