A Modern C++ Point of View of Programming in Image Processing
Un Point de Vue Moderne de la Programmation en C++ dans le Traitement d'Images
Résumé
C++ is a multi-paradigm language that enables the programmer to set up efficient image processing algorithms easily. This language strength comes from many aspects. C++ is high-level, so this enables developing powerful abstractions and mixing different programming styles to ease the development. At the same time, C++ is low-level and can fully take advantage of the hardware to deliver the best performance. It is also very portable and highly compatible which allows algorithms to be called from high-level, fast-prototyping languages such as Python or Matlab. One fundamental aspects where C++ shines is generic programming. Generic programming makes it possible to develop and reuse bricks of software on objects (images) of different natures (types) without performance loss. Nevertheless, conciliating genericity, efficiency, and simplicity at the same time is not trivial. Modern C++ (post-2011) has brought new features that made it simpler and more powerful. In this paper, we focus on some C++20 aspects of generic programming: ranges, views, and concepts, and see how they extend to images to ease the development of generic image algorithms while lowering the computation time. CCS Concepts: • Software and its engineering → Software development techniques; • Computing methodologies → Image processing.
Le C++ est un langage multi-paradigme qui permet au programmeur de mettre en place facilement des algorithmes de traitement d'image efficaces. La force de ce langage vient de plusieurs aspects. Le C++ est haut-niveau, donc il est possible de développer des abstractions puissantes et de mélanger différents styles de programmation pour faciliter le développement. En même temps, le C++ est bas-niveau et peut pleinement tirer parti du matériel pour livrer la meilleure performance. Il est aussi très portable et hautement compatible ce qui permet aux algorithmes d'être appelé par des langages haut-niveau, tels que Matlab ou Python, permettant de faire du prototypage rapide. Un aspect fondamental où le C++ brille est la Programmation Générique. Celle-ci rend possible le développement de réutiliser des briques logicielles sur des objets (images) de différentes natures (types) sans perdre en performance. Néanmoins, concilier la généricité, l'efficacité et la facilité d'utilisation, le tout en même temps n'est pas chose aisée. Le C++ moderne (post 2011) amène de nouvelles fonctionnalités qui rendent la Programmation Générique plus simple et plus puissante. Dans ce papier, nous nous concentrons sur certains aspects de la Programmation Générique du C++20 ; les ranges, les vues et les concepts, et nous étudions comment ces notions s'étendent et s'appliquent aux images, pour faciliter le développement d'algorithmes de traitement d'images tout en baissant le temps de compilation.
Origine | Fichiers produits par l'(les) auteur(s) |
---|---|
Commentaire | Version camera-ready avant mise en page de l'éditeur (ACM SIGPLAN) |