﻿{"id":16067,"date":"2026-01-15T10:00:00","date_gmt":"2026-01-15T09:00:00","guid":{"rendered":"https:\/\/www.sigterritoires.fr\/?p=16067"},"modified":"2026-01-10T19:04:46","modified_gmt":"2026-01-10T18:04:46","slug":"integration-de-esrgan-dans-qgis","status":"publish","type":"post","link":"https:\/\/www.sigterritoires.fr\/index.php\/integration-de-esrgan-dans-qgis\/","title":{"rendered":"Int\u00e9gration de ESRGAN dans QGIS"},"content":{"rendered":"\n<p>Il existe trois m\u00e9thodes simples pour exploiter ESRGAN dans QGIS (voir l&rsquo;article pr\u00e9c\u00e9dent).<br>La premi\u00e8re \u2013 la plus flexible \u2013 consiste \u00e0 ajouter un <strong>script Python dans la Processing Toolbox<\/strong> de QGIS.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenu <\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/integration-de-esrgan-dans-qgis\/#Integration_via_un_script_Python_Processing_Toolbox\" >Int\u00e9gration via un script Python (Processing Toolbox)<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/integration-de-esrgan-dans-qgis\/#Principe\" >Principe<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/integration-de-esrgan-dans-qgis\/#Exemple_de_script_version_NCNN_Vulkan_recommandee\" >Exemple de script (version NCNN Vulkan recommand\u00e9e)<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/integration-de-esrgan-dans-qgis\/#Script_QGIS_a_copier_dans_Processing_%E2%86%92_Scripts_%E2%86%92_Nouveau_script\" >Script QGIS (\u00e0 copier dans : Processing \u2192 Scripts \u2192 Nouveau script)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/integration-de-esrgan-dans-qgis\/#Comment_installer_ce_script_dans_QGIS\" >Comment installer ce script dans QGIS ?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/integration-de-esrgan-dans-qgis\/#Comment_lutiliser\" >Comment l\u2019utiliser ?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.sigterritoires.fr\/index.php\/integration-de-esrgan-dans-qgis\/#Avantages_de_cette_methode\" >Avantages de cette m\u00e9thode<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Integration_via_un_script_Python_Processing_Toolbox\"><\/span><strong>Int\u00e9gration via un script Python (Processing Toolbox)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Cette approche permet d\u2019appeler ESRGAN directement depuis QGIS, comme n\u2019importe quel algorithme de traitement.<br>L\u2019utilisateur s\u00e9lectionne un raster \u2192 ESRGAN l\u2019am\u00e9liore \u2192 QGIS recharge automatiquement le fichier r\u00e9sultant.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Principe\"><\/span><strong>Principe<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Le script Python :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>prend un raster d\u2019entr\u00e9e<\/strong>, appartenant d\u00e9j\u00e0 au projet QGIS ;<\/li>\n\n\n\n<li><strong>appelle Real-ESRGAN<\/strong> (version NCNN Vulkan ou PyTorch) en ligne de commande ;<\/li>\n\n\n\n<li><strong>g\u00e8re le fichier de sortie<\/strong> (nom, chemin, g\u00e9or\u00e9f\u00e9rencement si n\u00e9cessaire) ;<\/li>\n\n\n\n<li><strong>charge automatiquement la version am\u00e9lior\u00e9e dans QGIS<\/strong>.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Exemple_de_script_version_NCNN_Vulkan_recommandee\"><\/span>Exemple de script (version NCNN Vulkan recommand\u00e9e)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Ce script fonctionne en appelant l\u2019ex\u00e9cutable :<br><code>realesrgan-ncnn-vulkan.exe<\/code><\/p>\n\n\n\n<p>Il suppose que :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Real-ESRGAN-ncnn-vulkan se trouve dans : <mark style=\"background-color:#fcb900\" class=\"has-inline-color\">C:\/SR\/realesrgan-ncnn-vulkan-20220424-windows\/<\/mark><\/li>\n\n\n\n<li>On veut g\u00e9n\u00e9rer un fichier suffix\u00e9 <code>_sr.tif<\/code><\/li>\n\n\n\n<li>Le g\u00e9or\u00e9f\u00e9rencement doit \u00eatre repris depuis le raster d\u2019origine (via <a href=\"https:\/\/www.sigterritoires.fr\/index.php\/cartes-enc-dans-qgis-avec-postgis1\/\">GDAL<\/a>)<\/li>\n<\/ul>\n\n\n\n<p>Tu pouvez l\u2019adapter selon votre installation.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Script_QGIS_a_copier_dans_Processing_%E2%86%92_Scripts_%E2%86%92_Nouveau_script\"><\/span><strong>Script QGIS (\u00e0 copier dans : Processing \u2192 Scripts \u2192 Nouveau script)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n<div class='stb-container stb-style-black stb-caption-box'><div class='stb-caption'><div class='stb-logo'><img class='stb-logo__image' src='data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN\/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz\/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH\/w\/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA\/g88wAAKCRFRHgg\/P9eM4Ors7ONo62Dl8t6r8G\/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt\/qIl7gRoXgugdfeLZrIPQLUAoOnaV\/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl\/AV\/1s+X48\/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H\/LcL\/\/wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93\/+8\/\/UegJQCAZkmScQAAXkQkLlTKsz\/HCAAARKCBKrBBG\/TBGCzABhzBBdzBC\/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD\/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q\/pH5Z\/YkGWcNMw09DpFGgsV\/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY\/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4\/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L\/1U\/W36p\/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N\/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26\/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE\/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV\/MN8C3yLfLT8Nvnl+F30N\/I\/9k\/3r\/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt\/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi\/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a\/zYnKOZarnivN7cyzytuQN5zvn\/\/tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO\/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3\/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA\/0HIw6217nU1R3SPVRSj9Yr60cOxx++\/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3\/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX\/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8\/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb\/1tWeOT3dvfN6b\/fF9\/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR\/cGhYPP\/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF\/6i\/suuFxYvfvjV69fO0ZjRoZfyl5O\/bXyl\/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o\/2j5sfVT0Kf7kxmTk\/8EA5jz\/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5\/wAAgOkAAHUwAADqYAAAOpgAABdvkl\/FRgAAD59JREFUeNrsmnmMXVd9xz9nucvbZvF4GdtjO46dhcRZSGmCSIAExaUFQtoiUVSgFFQBFaISRaBSoH9QVaUUAU2VSrSVoGELSgRpGshCA8GQYGfBcVZsx47j2dc3M2\/ee3c55\/z6xxubpOSPCSX8QXOkq3ve1ZXO+dzfcr7nd54SEX4TmuY3pL0E8hLIi9Ts8z08Ojr3nN9iAgklzdl54iRBCBROcXx8kTgynBxvcuN3D\/Lk0TFtrNmiQrHnA++48qz3vu2KM0VYd\/jYhPrAJ77cHptenqrV0hNac9gH\/Wi73W5bLbz7rZdx9Wv2MDk+RV4UVBoNQhkofUHaV0fCcxPSu669dm0gL8ikWmGtGWy3O+dqFa48d9vQqx99\/MQF01NLGwb6BxJr4fYfPs7iYhcdPCHrLjsJY319tf22kd7T7XR+EkROAO5XbpG1tCBCCNKfZcXe8cmFd1SMvOmc7ZvM7p0jHBltc9UVF9PJFV\/6+r185ZYHGN52Jko8zeZS39z84nl7zt1x3puvPv89N912YEwr\/Q3vw80hhPt\/rSAhBKpJcvnWTYMfuuk7D72FIFz3qXdzbLTJR\/\/pLuKBjdz+4CS3PTDOTXc+QiWJ2LqxD18UlBFs3taHTgZptiPqfUMj3Ux9RIL+k1q9fn2z2fxXYPrFBxHB2uj9Q+v6\/nrThnjbKy85h0svOoPtm4dYLhUbRraw2HV85+FJlFZsP+cMNNDOcogNpi\/ionPWc8bGKnf++Dg7tqznlZeMMDDQtymtJJ8S1Ou8hL8KhAMvGohI0Cay\/1BvND6YJpWkXqtxzesu4Mb\/Psz9Nx1i64YGjeF1dLolmyINSqGCICFgfRUpPT4rObrgIPZ86M9ex3lnrCNNYWx6AQ3U+\/quHB2b+lpfLf3L0he3\/upBRFSSVv+5Uq38eb1SUY16leVOyT9+8yHufGQSSSyPtT1FJaVSq6KNQikFBIIP4DziPFFW0ml1mex45tqeTUMNjo3P8eRTTepVTSWJue\/A47sG+tMvXnjBrkQrfVPQYXUS6v8ColBKqXaWfyatpO+vVaqqUU1ZWMr47Lce4ZsPjlMdqFFppGSRIUpiImvQSvXGDYHECN55sszh05xKYnnv3nO45pLtPDOzxF987kfY4HnDq7bS6XaoN\/pR2g0rrT7\/zDMnl7NW985IB2A1DV9zzdpAQvDPwcha7fdFJnywWkl1f73Ccjfw8Rse5LYnptk0Moitppg0xiYRylq0VSilQQkEQYtQ1SK6k6si15SR5Ws\/HaUQGK4Y9l6+i6KbMT7f4a59T7E8d5wdm2NqtXRrrW4\/7Z0fVbgnRIUXZhHXnkQpCEFotctLa7X6RwcHBpO+WoX5VsGnbz7E3cfn2bx9iKiWYqopNo3RscVEEUor0KrnCOIpCw8aUqMRoxBtGG91mG3nvPW3d\/F7l2ymcCUHD0+ysNjmwANzHD4+yuzcAm97y+UXp\/XKJ4vW8p9ao3PU87uXej4Zf\/2X\/xMfAo1aXL3wZVu+UvroD\/c\/OsMr9uzglgcmuOngBBu3rcM2qkTV9LRFTGyJkghR+ufjBY+4gCtLQlmiypKaBM4aiPnkVbuppxGtlQ7dLMP7AudKHnjsaZqLy0xOT9NaaeGkIJLyXaEovhIQ+eyn\/nZtFvnYF+6m0y15+XnDr7\/u42988w23Psm\/33aYN77+YprKsmFzP1E1wVZibDUmqsSYNMEkEcYa0KBYDXYREecxRqtgFDnIpprh46\/doeqJoSwd1hisMRQltHPHzpF1bFhXYXhTnbt\/dJCJySZbhvs+stBc\/J4ry8k1i8ZaAoMN07hw99B7Dj05a2\/dd4zLf+tMrnrFDtZvqJNbgyQRNo2wadyLjzTCxhZtNFpptFYorUgiEyppJDqJeq4XW3X59n7VV4lwLpxORkortNYoFHnh6WYlWV5y7lkjWGOYXWjtiZJ0b5Skas0g3SzDqnD+xsHK74gyXHnpLqr9NbpeuOjMIX53zzCNaoSJLcZaTGTQ0erkFav3Xox4Ee0VykYaYy1RZHnZUK2X0f+XvysUIoJWGqM1BEjThN1nbqHV6pI5eZcytrpmkLN3btJFKVdNzXbivVfs5FWXbOPEbIcb95\/kwdFFFgpPmkRoazBWY6zBaIM+DcFqvzc7AaV1710HHJzrnF4V1LNgRAmIoFTvudYaVwaGhvqIraGbla\/RqB1rBumrJVsaib3yth88zZdufozLzh\/mrB2DLBWek8sZj8ys0CwDohRaK7QCo1atoBT6WXetFEYrdG+hR2mIrH7u4hYEEQheCNLrA6c\/iHeBXbtHWGq27A\/2PX75mtNvu1NcGLzsUTriq7cfYaG0GKu5+oJh\/uCKM5npeh5e6HKsK3R9oL66UD37657qqtVr9Q1io7nr5DIXDibh5Rsb2jlHQABBIygBQRCRU8sfPgTi2DI42GCpefjlawYps3y3c7I+rcY4rzg23uKP33Qer71ohJ3Dg73PGjzfG13mxqdXmCgDKgrE2vyCiNCnbO4EJQGNsJCV\/NfTTT1Sj9lQjdCiyfPAUidHGcEahQ+ChJ6FAPK8ZHjLRrZsXb99zSBTUwu7RKWxUoZaJeaho002PzzNta88g6IoUNqitWLvjn4u3lDjtrE2t8\/kOK9IIv2s4F31\/RAQ7xDvIQRSA\/vGFhmbX+GanQPUDDxxdJYfHjjBxTtqXLSzThIHfPCE4PG+FzvOOdrtzvo1g+RlWG8ji9IGUFRjQyO1dPKCOOoFLWhCEDZUI959dj\/dsMQtE13iJKJiNbHpZa3gheAd4jwSAoSeZkq14sh8m78fXUA6npUTc7Snltj\/03HeuXcrey9dj\/ehdwVPEMG7QNbN62sXjX5Fi7WI9OODkEQRl501QGyEbl4SiyKJY4zWeBdQGi5dFyMIjy2VLDrPYiYkBhIFwQckeCQ4vHeIc0jpSEQwSpN1utjS01+JaHtP4XvS3zmP8wHnHKherAQRvWaQUE5nSpZwJicrhxiuj7BlncV5hy\/l55kpijBGEzycP5Bw0VDKTNezWHoems+5Z7pDy3m0BMR7gu+5SnC9S7xAIYTlHApP8AGDZ\/+hCc7bZkjiQFmWlM5hjGFqYoaVpaV87SAhn1AevFtBqZj52SmeODbFzpF+NEJe9NKnCMRRhDWKVPf01daaZSuWc\/tTtieKv9s\/BsGjvcc7TyhKQubwWYlkjmxukWx2npAVhDLD5V2enmlx4GHHay\/bTlGWpy1SZCW+LBfXDCKBY6KlLd7V4jSQ5wXfvOMJ9py1iR3DgxRFcWrHSJBAbC3amOesH8ZoWq2M5swSqRKU94TCIXlJyD1SONxKl2xmFp93CWWJ+Jzgc5R3tDs5RVGSFwVBAqDIiwJt7PQLsEj5Mx30uEh5dnAFlUrg6IkZjpyYY9vGBi4EUD054UXwIWC1xhiDUQprNHcdnubz9xxDZyUKIZSBUPYAxHlCt6RoNnF5hlVQrVraKzlOhCjSbByq0O50KZ0DFGXpmJqaR+DwmkGMsY8GCQeCL84WlyG+ACLuO3iSi8\/ZSH+9QhaEEHoZxTuPtbonU7QmNoZ7j0wxNr7IhmqM855QBsR5KAOhdD2I9gpKAt47Mi8ECXgX2DbcYOf2AZbaHXwIaK1YWlrBRhak+Mnas1ZwLRG5W7x7p\/cZynVIk4Tv7z+OF817rr2ATevr5CEQQoTXntJprLGksSEoj1vJ0Z0cJwFxq\/v2AFJ6yuVFytZyb30JHgm+l81Cz1V3bu1DESjyAq2htZLxzMlpnA8zutL3yJq1lpICI+V9oWjPBl8QXAcJXbTk3PHjo9xx33FEHN08J8tzsrwgywoIJZ0s4+v7jrPv0AQV73HtHN8tkMwTugVFc4FyebGXxcSDBE6JK1GgDDRXurS7GS54tNaMjs8xt7DM0nLrWyLMrtkiShlQ8gzivhpc8aFQZnizglWW1Gh++vg4b7hiB2kS4XwgspZqGrHv0Czff3iGnxxZIAhUYk0vnAx4T7GySJmt9MYIAUVACIgKBNWzjIhneaVLN8vxzrO80ub4yRlOjk64bH7sG6EsyzWDaG0BCh\/CjS5vv01ruzmYDkFbEMXs3ALziysMDVTRyuFtRBwJ37nvGX5wcIb+WkwUWUoXUNogoUPZXiSU2bMEbwB6VhHxq0AeE2nQUDqH4JlvtphdyOm285vLlYUD4oq1Fx867cXVNOwfUjb9N2OTv1FaoTCIh9YSjE7O0VfbjHMFA32KsekuE9OLVG1Ai8M7UFrjshY+W0a862lyAcEhEnpVllV5rNCgVneYRoN4jo8ucf+jC3TbxYRV4QtOmxyl1w4S\/CnrKe87zeuVhFcrM3yViEYHYcWXHH5qgl3bhxARxmcLbrrrGCdGF4jihOAEKPHFCr7soJRCUIgLQOjt6bXuSWP9XKGPBLSJuPfRJU6Md2h1Db7sfM5Lfn+0buR0PK0ta52i7m3VZspO8xMmqvyHTWW3IIgrmZiepZN1cWXg8afmeezIBL4EqwNlURKKDiIepQ1B9SaI0ihrfg5gev1ToAjg4ampgMs1hDq+eeSGfPnp6021f3XHpdYOctoPFUhwEMJ9WWvqw6nwRVthOOA59MgRXnHRDvobdb59x0Hml0rq9Qr5coEEhzYWpTTBF70al7Eos1p91Aqs6YEoiyjTS6C+Fx\/agLWK7twTd2ULRz+m4yh71uzWDlK2pn6hbCriblW9Ea8zSWNkbnqW7975AG\/5\/SvYOGiYHB8j8xHKxChtkeAQQFmDMRGo0JvsqiVEW5SOQEUoFSGsQolBjCZfPnJX0TrxXqWjCQi\/ZBH7eQJKKYvP298ubXM5iPucjuoXPv7okwytS+iraiLpIC5FCChvwGiiJAGjCMGhTG\/VRxvQFqViRKUok4CJCSZC4hrBefLxR25wnZMfVTpe8znJCzsfURqUvtt1l\/5Il9knlK28\/d59D9I\/2I9WAe8ygit6ApIERW9j5kShYbUebIEYpSpgKoS0BtUGqjGAa05N5RMHPlPOP\/0v2jTyF\/WgR6EQpX7m85X3aV\/ekRXZh\/MsvzipVNHWYuIY5xxaCWXZqx+b2BKCweURVmKgjsR9qL4BosF1BAvFxGPfkPbKdeXcU\/uVTn9dZ4gKlGoH774quHs2rq9fneWdtxeFeU21Fsfbt2yg3S2YWchRcYwyhjS2NBqWjq+QNCxxwyN6diZ65vu3LPbt\/np7Zemg8WpZ2WQtIfErPtXtlezHrOHL2vCt9uzkSL0irxqsb7pkpdU5o56Y9VhbGxoweudIcJFeWGqtzEy6vH20ODl\/f27qDymTzKqklWFiCL\/8wa566U81L4G8BPL\/A+R\/BgAzCInEE2+\/LgAAAABJRU5ErkJggg==' alt='img'\/><\/div><div class='stb-caption-content'>esrgan_superresolution.py<\/div><div class='stb-tool'><\/div><\/div><div class='stb-content'><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from qgis.core import (\n    QgsProcessingAlgorithm,\n    QgsProcessingParameterRasterLayer,\n    QgsProcessingParameterNumber,\n    QgsProcessingParameterEnum,\n    QgsProcessingParameterRasterDestination,\n    QgsProcessingException\n)\nimport os\nimport subprocess\nfrom osgeo import gdal, osr\n\nclass ESRGANSuperResolution(QgsProcessingAlgorithm):\n\n    def initAlgorithm(self, config=None):\n        self.addParameter(\n            QgsProcessingParameterRasterLayer(\"INPUT_RASTER\", \"Raster d\u2019entr\u00e9e\")\n        )\n        self.addParameter(\n            QgsProcessingParameterNumber(\n                \"SCALE\",\n                \"Facteur d\u2019agrandissement\",\n                type=QgsProcessingParameterNumber.Integer,\n                defaultValue=4\n            )\n        )\n        self.addParameter(\n            QgsProcessingParameterEnum(\n                \"MODEL\",\n                \"Mod\u00e8le ESRGAN\",\n                options=&#091;\"realesrgan-x4plus\", \"realesrgan-x4plus-anime\", \"realesrnet-x4plus\"],\n                defaultValue=0\n            )\n        )\n        self.addParameter(\n            QgsProcessingParameterRasterDestination(\"OUTPUT_RASTER\", \"Raster de sortie\")\n        )\n\n    def processAlgorithm(self, parameters, context, feedback):\n        input_layer = self.parameterAsRasterLayer(parameters, \"INPUT_RASTER\", context)\n        if input_layer is None:\n            raise QgsProcessingException(\"Raster d\u2019entr\u00e9e invalide.\")\n        \n        input_raster = input_layer.source()\n        scale = self.parameterAsInt(parameters, \"SCALE\", context)\n        model_index = self.parameterAsInt(parameters, \"MODEL\", context)\n        output_raster = self.parameterAsOutputLayer(parameters, \"OUTPUT_RASTER\", context)\n\n        exe = r\"<mark style=\"background-color:#fcb900\" class=\"has-inline-color\">C:\/SR\/realesrgan-ncnn-vulkan-20220424-windows\/realesrgan-ncnn-vulkan.exe<\/mark>\"\n        if not os.path.exists(exe):\n            raise QgsProcessingException(\"Executable Real-ESRGAN introuvable : \" + exe)\n\n        # Fichiers temporaires\n        tmp_png = os.path.splitext(input_raster)&#091;0] + \"_tmp.png\"\n        sr_png = os.path.splitext(input_raster)&#091;0] + \"_sr.png\"\n\n        model_list = &#091;\"realesrgan-x4plus\", \"realesrgan-x4plus-anime\", \"realesrnet-x4plus\"]\n        model_name = model_list&#091;model_index]\n\n        # -----------------------------\n        # Conversion vers PNG\n        feedback.pushInfo(\"Conversion en PNG\u2026\")\n        subprocess.run(&#091;\"gdal_translate\", \"-of\", \"PNG\", input_raster, tmp_png], check=True)\n\n        # -----------------------------\n        # Super-r\u00e9solution ESRGAN\n        feedback.pushInfo(\"Ex\u00e9cution ESRGAN\u2026\")\n        subprocess.run(&#091;exe, \"-i\", tmp_png, \"-o\", sr_png, \"-n\", model_name, \"-s\", str(scale)], check=True)\n\n        # -----------------------------\n        # Calcul de la nouvelle g\u00e9otransformation\n        <a href=\"https:\/\/www.sigterritoires.fr\/index.php\/introduction-aux-systemes-de-reference\/\">src<\/a> = gdal.Open(input_raster)\n        gt = src.GetGeoTransform()\n        proj = src.GetProjection()\n        # Ajustement du pixel pour conserver l'emprise\n        new_gt = (gt&#091;0], gt&#091;1]\/scale, gt&#091;2], gt&#091;3], gt&#091;4], gt&#091;5]\/scale)\n\n        # Cr\u00e9ation du worldfile pour sr_png\n        wld_path = sr_png.replace(\".png\", \".wld\")\n        with open(wld_path, \"w\") as f:\n            f.write(f\"{new_gt&#091;1]}\\n{new_gt&#091;2]}\\n{new_gt&#091;4]}\\n{new_gt&#091;5]}\\n{new_gt&#091;0]}\\n{new_gt&#091;3]}\\n\")\n\n        # Cr\u00e9ation du .prj\n        srs = osr.SpatialReference()\n        srs.ImportFromWkt(proj)\n        prj_path = sr_png.replace(\".png\", \".prj\")\n        with open(prj_path, \"w\") as f:\n            f.write(srs.ExportToWkt())\n\n        # -----------------------------\n        # Reprojection \/ cr\u00e9ation du TIF final\n        feedback.pushInfo(\"Cr\u00e9ation du TIF final\u2026\")\n        subprocess.run(&#091;\n            \"gdalwarp\",\n            \"-t_srs\", src.GetProjection(),\n            sr_png, output_raster\n        ], check=True)\n\n        # -----------------------------\n        # Nettoyage\n        for f in &#091;tmp_png, sr_png, wld_path, prj_path]:\n            if os.path.exists(f):\n                os.remove(f)\n\n        return {\"OUTPUT_RASTER\": output_raster}\n\n    def name(self):\n        return \"esrgan_super_resolution\"\n\n    def displayName(self):\n        return \"Super-r\u00e9solution ESRGAN (NCNN)\"\n\n    def group(self):\n        return \"Super-R\u00e9solution\"\n\n    def groupId(self):\n        return \"super_resolution\"\n\n    def createInstance(self):\n        return ESRGANSuperResolution()\n\n<\/code><\/pre>\n\n\n\n<p><\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Comment_installer_ce_script_dans_QGIS\"><\/span><strong>Comment installer ce script dans QGIS ?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Ouvrez <strong>QGIS<\/strong><\/li>\n\n\n\n<li>Allez dans :<br><strong>Traitements \u2192 Bo\u00eete \u00e0 outils \u2192 Scripts \u2192 Ouvrir le dossier des scripts<\/strong><\/li>\n\n\n\n<li>Cr\u00e9ez un nouveau fichier :<br><code>esrgan_superresolution.py<\/code><\/li>\n\n\n\n<li>Collez le script ci-dessus<\/li>\n\n\n\n<li>Red\u00e9marrez QGIS<\/li>\n<\/ol>\n\n\n\n<p>Vous verrez appara\u00eetre :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Scripts \u2192 Super-r\u00e9solution Real-ESRGAN (NCNN)\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Comment_lutiliser\"><\/span><strong>Comment l\u2019utiliser ?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Chargez une ortho, photo ancienne, ou tout raster dans QGIS<\/li>\n\n\n\n<li>Ouvrez :<br><strong>Traitements \u2192 Scripts <strong>\u2192<\/strong><\/strong> <strong>Super-r\u00e9solution <\/strong><\/li>\n\n\n\n<li>Choisissez :\n<ul class=\"wp-block-list\">\n<li>Raster d\u2019entr\u00e9e<\/li>\n\n\n\n<li>Facteur \u00d74<\/li>\n\n\n\n<li>Mod\u00e8le ESRGAN<\/li>\n\n\n\n<li>Raster de sortie<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Lancez<\/li>\n<\/ol>\n\n\n\n<p>\u2192 Le raster super-r\u00e9solu appara\u00eet directement sur la carte QGIS. <\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Avantages_de_cette_methode\"><\/span><strong>Avantages de cette m\u00e9thode<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Int\u00e9gration propre dans QGIS<\/li>\n\n\n\n<li>Fonctionne sans GPU (NCNN Vulkan = CPU + GPU Intel)<\/li>\n\n\n\n<li>R\u00e9sultats reproductibles<\/li>\n\n\n\n<li>Aucune modification de QGIS n\u2019est n\u00e9cessaire<\/li>\n\n\n\n<li>Possibilit\u00e9 d\u2019int\u00e9grer ensuite dans un cha\u00eenage de traitements<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il existe trois m\u00e9thodes simples pour exploiter ESRGAN dans QGIS (voir l&rsquo;article pr\u00e9c\u00e9dent).La premi\u00e8re \u2013 la plus flexible \u2013 consiste \u00e0 ajouter un script Python dans la Processing Toolbox de QGIS. Int\u00e9gration via un script Python&hellip;<\/p>\n","protected":false},"author":1,"featured_media":16064,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"give_campaign_id":0,"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"sfsi_plus_gutenberg_text_before_share":"","sfsi_plus_gutenberg_show_text_before_share":"","sfsi_plus_gutenberg_icon_type":"","sfsi_plus_gutenberg_icon_alignemt":"","sfsi_plus_gutenburg_max_per_row":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3853,147,62],"tags":[3917,3869,343,58],"class_list":["post-16067","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-iafr","category-images","category-qgis-2","tag-esrgan","tag-ia","tag-images","tag-qgis"],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.sigterritoires.fr\/wp-content\/uploads\/2025\/11\/resultatsr-scaled.jpg?fit=2560%2C755&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/p6XU0A-4b9","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts\/16067","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/comments?post=16067"}],"version-history":[{"count":0,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/posts\/16067\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/media\/16064"}],"wp:attachment":[{"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/media?parent=16067"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/categories?post=16067"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sigterritoires.fr\/index.php\/wp-json\/wp\/v2\/tags?post=16067"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}