{"id":309,"date":"2017-12-23T04:03:01","date_gmt":"2017-12-23T04:03:01","guid":{"rendered":"https:\/\/garikoitz.info\/blog\/?p=309"},"modified":"2020-09-30T09:05:26","modified_gmt":"2020-09-30T09:05:26","slug":"eliminacion-de-ruido-y-compresion-de-imagenes-mediante-wavelets","status":"publish","type":"post","link":"https:\/\/garikoitz.info\/blog\/2017\/12\/eliminacion-de-ruido-y-compresion-de-imagenes-mediante-wavelets\/","title":{"rendered":"Eliminaci\u00f3n de ruido y compresi\u00f3n de im\u00e1genes mediante Wavelets"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u00cdndice<\/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=\"Alternar tabla de contenidos\"><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 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/eliminacion-de-ruido-y-compresion-de-imagenes-mediante-wavelets\/#Objetivo\" >Objetivo<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/eliminacion-de-ruido-y-compresion-de-imagenes-mediante-wavelets\/#Introduccion\" >Introducci\u00f3n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/eliminacion-de-ruido-y-compresion-de-imagenes-mediante-wavelets\/#Programa_desarrollado_en_Matlab\" >Programa desarrollado en Matlab<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/eliminacion-de-ruido-y-compresion-de-imagenes-mediante-wavelets\/#Anadir_y_eliminar_ruido\" >A\u00f1adir y eliminar ruido<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/eliminacion-de-ruido-y-compresion-de-imagenes-mediante-wavelets\/#Anadir_ruido\" >A\u00f1adir ruido<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/eliminacion-de-ruido-y-compresion-de-imagenes-mediante-wavelets\/#Eliminar_ruido\" >Eliminar ruido<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/eliminacion-de-ruido-y-compresion-de-imagenes-mediante-wavelets\/#Compresion_de_imagenes\" >Compresi\u00f3n de im\u00e1genes<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/eliminacion-de-ruido-y-compresion-de-imagenes-mediante-wavelets\/#Resultados_obtenidos\" >Resultados obtenidos<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/eliminacion-de-ruido-y-compresion-de-imagenes-mediante-wavelets\/#Codigo_Matlab\" >C\u00f3digo Matlab<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/eliminacion-de-ruido-y-compresion-de-imagenes-mediante-wavelets\/#Archivos_del_proyecto\" >Archivos del proyecto<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/eliminacion-de-ruido-y-compresion-de-imagenes-mediante-wavelets\/#Bibliografia\" >Bibliograf\u00eda<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Objetivo\"><\/span>Objetivo<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Aplicar an\u00e1lisis wavelets de eliminaci\u00f3n de ruido y de compresi\u00f3n de la informaci\u00f3n a se\u00f1ales provenientes de experimentos de fusi\u00f3n nuclear por confinamiento magn\u00e9tico.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Introduccion\"><\/span>Introducci\u00f3n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Disponemos de im\u00e1genes en bruto almacenadas en forma de matriz. Cada archivo en bruto tiene un tama\u00f1o de 5631 KB y se corresponde con una imagen de 576&#215;385 pixels.<\/p>\n<figure id=\"attachment_311\" aria-describedby=\"caption-attachment-311\" style=\"width: 145px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-311\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig1.png\" alt=\"\" width=\"145\" height=\"155\"><\/a><figcaption id=\"caption-attachment-311\" class=\"wp-caption-text\">Figura 1 \u2013 Detalle del archivo tsECH11568_image.dat<\/figcaption><\/figure>\n<p>Los archivos son im\u00e1genes de diagn\u00f3stico <em><a href=\"https:\/\/en.wikipedia.org\/wiki\/Thomson_scattering\" target=\"_blank\" rel=\"noopener noreferrer\">Thomson Scattering<\/a> TJ-II<\/em> y se dividen en cinco grupos.<\/p>\n<ul>\n<li>Fondo c\u00e1mara CCD (BKGND).<\/li>\n<li>Plasma en corte ECRH (COFF).<\/li>\n<li>Plasma con calentamiento ECRH (ECH).<\/li>\n<li>Plasma con calentamiento NBI (NBI).<\/li>\n<li>Luz par\u00e1sita sin plasma (STRAY).<\/li>\n<\/ul>\n<figure id=\"attachment_315\" aria-describedby=\"caption-attachment-315\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/images.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-315\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/images-300x223.png\" alt=\"\" width=\"300\" height=\"223\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/images-300x223.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/images-364x270.png 364w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/images.avif 587w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-315\" class=\"wp-caption-text\">Figura 2 \u2013 Aspecto de las im\u00e1genes a excepci\u00f3n del tipo COFF.<\/figcaption><\/figure>\n<h2><span class=\"ez-toc-section\" id=\"Programa_desarrollado_en_Matlab\"><\/span>Programa desarrollado en Matlab<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>A continuaci\u00f3n veamos unas capturas del programa desarrollado.<\/p>\n<figure id=\"attachment_313\" aria-describedby=\"caption-attachment-313\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/interfaz.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-313\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/interfaz-300x158.png\" alt=\"\" width=\"300\" height=\"158\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/interfaz-300x158.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/interfaz-768x404.png 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/interfaz-513x270.png 513w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/interfaz.avif 869w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-313\" class=\"wp-caption-text\">Figura 3 \u2013 Aspecto de la interfaz.<\/figcaption><\/figure>\n<p>Tras a\u00f1adir ruido a la imagen seleccionada se presenta la figura 4.<\/p>\n<figure id=\"attachment_317\" aria-describedby=\"caption-attachment-317\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig4.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-317\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig4-300x115.png\" alt=\"\" width=\"300\" height=\"115\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig4-300x115.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig4-768x295.png 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig4-1024x393.png 1024w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig4-604x232.png 604w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig4.avif 1239w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-317\" class=\"wp-caption-text\">Figura 4 \u2013 Resultado de la adici\u00f3n de ruido.<\/figcaption><\/figure>\n<p>Tras la eliminaci\u00f3n de ruido de la imagen seleccionada se presentan la figura 5, 6 y 7.<\/p>\n<figure id=\"attachment_319\" aria-describedby=\"caption-attachment-319\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig5.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-319\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig5-300x92.png\" alt=\"\" width=\"300\" height=\"92\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig5-300x92.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig5-768x235.png 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig5-1024x313.png 1024w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig5-604x185.png 604w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig5.avif 1256w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-319\" class=\"wp-caption-text\">Figura 5 \u2013 Resultado de la eliminaci\u00f3n de ruido.<\/figcaption><\/figure>\n<figure id=\"attachment_320\" aria-describedby=\"caption-attachment-320\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig6.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-320\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig6-300x203.png\" alt=\"\" width=\"300\" height=\"203\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig6-300x203.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig6-768x521.png 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig6-1024x694.png 1024w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig6-398x270.png 398w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig6.avif 1376w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-320\" class=\"wp-caption-text\">Figura 6 \u2013 Resultado de la eliminaci\u00f3n de ruido. Descomposici\u00f3n por canales RGB.<\/figcaption><\/figure>\n<figure id=\"attachment_321\" aria-describedby=\"caption-attachment-321\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig7.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-321\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig7-300x192.png\" alt=\"\" width=\"300\" height=\"192\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig7-300x192.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig7-768x491.png 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig7-1024x655.png 1024w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig7-422x270.png 422w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig7.avif 1240w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-321\" class=\"wp-caption-text\">Figura 7 \u2013 Resultado de la eliminaci\u00f3n de ruido. Descomposici\u00f3n por canales RGB de coeficientes.<\/figcaption><\/figure>\n<p>Tras la compresi\u00f3n de la imagen seleccionada se presenta la figura 8.<\/p>\n<figure id=\"attachment_322\" aria-describedby=\"caption-attachment-322\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig8.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-322\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig8-300x225.png\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig8-300x225.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig8-768x577.png 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig8-359x270.png 359w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig8.avif 920w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-322\" class=\"wp-caption-text\">Figura 8 \u2013 Resultado de la compresi\u00f3n de la imagen.<\/figcaption><\/figure>\n<p>El programa se apoya en tres carpetas para su funcionamiento como indica la figura 9.<\/p>\n<figure id=\"attachment_323\" aria-describedby=\"caption-attachment-323\" style=\"width: 110px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig9.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-323\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig9.png\" alt=\"\" width=\"110\" height=\"69\"><\/a><figcaption id=\"caption-attachment-323\" class=\"wp-caption-text\">Figura 9 \u2013 Carpetas usadas por el programa realizado.<\/figcaption><\/figure>\n<ul>\n<li><strong>TS_files<\/strong>: Reservado para archivos de configuraci\u00f3n del programa.<\/li>\n<li><strong>TS_saved_files<\/strong>: Es donde se almacenan autom\u00e1ticamente las im\u00e1genes resultantes del procesado.<\/li>\n<li><strong>TS_Signals<\/strong>: Todas las im\u00e1genes en bruto (.dat) que haya en esta carpeta el programa las lee autom\u00e1ticamente y las carga en un men\u00fa <em>popup<\/em> para facilitar el procesado. Si esta carpeta estuviera vac\u00eda, tambi\u00e9n se puede abrir una imagen en bruto desde el men\u00fa File &gt; Open TS Image.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Anadir_y_eliminar_ruido\"><\/span>A\u00f1adir y eliminar ruido<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Anadir_ruido\"><\/span>A\u00f1adir ruido<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Para la adici\u00f3n de ruido utilizaremos la funci\u00f3n <em>imnoise<\/em> que nos permite a\u00f1adir ruido f\u00e1cilmente y de entre varios tipos.<\/p>\n<p style=\"text-align: center;\"><strong>J = imnoise(I,type,int)<\/strong><\/p>\n<p>Donde:<\/p>\n<ul>\n<li>I: es la imagen a la que queremos a\u00f1adir ruido.<\/li>\n<li>type: el tipo de ruido.<\/li>\n<li>Int: es la intensidad del ruido.<\/li>\n<li>J: es la imagen con ruido.<\/li>\n<\/ul>\n<figure id=\"attachment_328\" aria-describedby=\"caption-attachment-328\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig10_.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-328\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig10_-300x105.png\" alt=\"\" width=\"300\" height=\"105\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig10_-300x105.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig10_.avif 532w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-328\" class=\"wp-caption-text\">Figura 10 \u2013 Tipos de ruido e intensidades disponibles.<\/figcaption><\/figure>\n<figure id=\"attachment_326\" aria-describedby=\"caption-attachment-326\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig11.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-326\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig11-300x105.png\" alt=\"\" width=\"300\" height=\"105\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig11-300x105.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig11-768x268.png 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig11-604x211.png 604w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig11.avif 862w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-326\" class=\"wp-caption-text\">Figura 11 \u2013 Resultado de a\u00f1adir ruido speckle de intensidad 0.08.<\/figcaption><\/figure>\n<h3><span class=\"ez-toc-section\" id=\"Eliminar_ruido\"><\/span>Eliminar ruido<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Para la eliminaci\u00f3n de ruido utilizaremos la funci\u00f3n de la transformada discreta 2D <em>dwt2<\/em>. A continuaci\u00f3n calculamos el nivel de error y el umbral, descomponemos (<em>wavedec2<\/em>) el canal y umbralizamos para finalmente reconstruirlo (waverec2). Esto se hace con los tres canales y finalmente se unen para formar la imagen final.<\/p>\n<p style=\"text-align: center;\"><strong>[cA,cH,cV,cD] = dwt2(X,&#8217;wname&#8217;);<\/strong><\/p>\n<p style=\"text-align: center;\"><strong>[C,S] = wavedec2(X,N,&#8217;wname&#8217;); XDEN = waverec2(C,S,&#8217;wname&#8217;)<\/strong><\/p>\n<p>Donde:<\/p>\n<ul>\n<li><strong>cA, cH, cV y cD<\/strong>: son los coeficientes de descomposici\u00f3n de la imagen.<\/li>\n<li><strong>X<\/strong>: es la imagen a tratar. <strong>XDEN<\/strong>: la imagen resultante.<\/li>\n<li><strong>C<\/strong>: es el vector de descomposici\u00f3n. <strong>S<\/strong>: es la matriz de seguimiento del vector.<\/li>\n<li><strong>wname<\/strong>: es el tipo de wavelet<\/li>\n<\/ul>\n<p>A continuaci\u00f3n veamos el c\u00f3digo principal de eliminaci\u00f3n de ruido.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"matlab\">%aR\n        [CA,CH,CV,CD] = dwt2(redChannel,tipowave);\n        subplot(4,4,5); imshow(CA\/255);title('CA redChannel');\n        subplot(4,4,6); imshow(CH\/255);title('CH redChannel');\n        subplot(4,4,7); imshow(CV\/255);title('CV redChannel');\n        subplot(4,4,8); imshow(CD\/255);title('CD redChannel');\n        noiselev = median(abs(CD(:)))\/0.6745;\n        thresh = sqrt(2*log(numel(redChannel)))*noiselev;\n        clear CA, clear CH, clear CV, clear CD;\n        [c,l] = wavedec2(redChannel,n,tipowave);\n        Y = wthresh(c(prod(l(1,:))+1:end),sorh,thresh);\n        c_n = c;\n        c_n(prod(l(1,:))+1:end) = Y;\n        aR=waverec2(c_n,l,tipowave);\n%aG\n        [CA,CH,CV,CD] = dwt2(greenChannel,tipowave);\n        subplot(4,4,9); imshow(CA\/255);title('CA greenChannel');\n        subplot(4,4,10); imshow(CH\/255);title('CH greenChannel');\n        subplot(4,4,11); imshow(CV\/255);title('CV greenChannel');\n        subplot(4,4,12); imshow(CD\/255);title('CD greenChannel');\n        noiselev = median(abs(CD(:)))\/0.6745;\n        thresh = sqrt(2*log(numel(greenChannel)))*noiselev;\n        clear CA, clear CH, clear CV, clear CD;\n        [c,l] = wavedec2(greenChannel,n,tipowave);\n        Y = wthresh(c(prod(l(1,:))+1:end),sorh,thresh);\n        c_n = c;\n        c_n(prod(l(1,:))+1:end) = Y;\n        aG=waverec2(c_n,l,tipowave);\n%aB\n        [CA,CH,CV,CD] = dwt2(blueChannel,tipowave);\n        subplot(4,4,13); imshow(CA\/255);title('CA blueChannel');\n        subplot(4,4,14); imshow(CH\/255);title('CH blueChannel');\n        subplot(4,4,15); imshow(CV\/255);title('CV blueChannel');\n        subplot(4,4,16); imshow(CD\/255);title('CD blueChannel');\n        noiselev = median(abs(CD(:)))\/0.6745;\n        thresh = sqrt(2*log(numel(blueChannel)))*noiselev;\n        clear CA, clear CH, clear CV, clear CD;\n        [c,l] = wavedec2(blueChannel,n,tipowave);\n        Y = wthresh(c(prod(l(1,:))+1:end),sorh,thresh);\n        c_n = c;\n        c_n(prod(l(1,:))+1:end) = Y;\n        aB=waverec2(c_n,l,tipowave);\n        XDEN = cat(3, aR, aG, aB);\n        XDEN=uint8(XDEN);\n<\/pre>\n<p>Para medir en cierta medida la calidad de la reconstrucci\u00f3n de la imagen usaremos la relaci\u00f3n se\u00f1al a ruido de pico o en su t\u00e9rmino anglosaj\u00f3n <em>Peak Signal to Noise Ratio<\/em> (PSNR) y el error cuadr\u00e1tico medio cuyo t\u00e9rmino anglosaj\u00f3n es <em>Mean Squared error<\/em> (MSE). Cuanto mayor es el PSNR mejor es la codificaci\u00f3n de la imagen.<\/p>\n<figure id=\"attachment_318\" aria-describedby=\"caption-attachment-318\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla1_wav.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-318\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla1_wav-300x139.png\" alt=\"\" width=\"300\" height=\"139\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla1_wav-300x139.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla1_wav.avif 562w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-318\" class=\"wp-caption-text\">Tabla 1 \u2013 Resultados obtenidos alterando el nivel.<\/figcaption><\/figure>\n<figure id=\"attachment_314\" aria-describedby=\"caption-attachment-314\" style=\"width: 234px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/cmp_ruido.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-314\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/cmp_ruido-234x300.png\" alt=\"\" width=\"234\" height=\"300\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/cmp_ruido-234x300.png 234w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/cmp_ruido-211x270.png 211w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/cmp_ruido.avif 605w\" sizes=\"auto, (max-width: 234px) 100vw, 234px\" \/><\/a><figcaption id=\"caption-attachment-314\" class=\"wp-caption-text\">Figura 12 \u2013 Comparativa eliminaci\u00f3n de ruido con rbio1.1 y varios niveles.<\/figcaption><\/figure>\n<p>En la tabla 1 podemos ver que el PSNR m\u00e1s alto se obtiene con el nivel m\u00e1s bajo (N=1) y en este caso la wavelet rbio1.1, pero si nos fijamos m\u00e1s en detalle en las im\u00e1genes de la figura 12, podemos comprobar que la eliminaci\u00f3n de ruido empieza a ser satisfactoria a partir de N=4, por lo tanto, obviando el PSNR la mejor configuraci\u00f3n ser\u00eda rbio1.1 y N=4.<\/p>\n<figure id=\"attachment_329\" aria-describedby=\"caption-attachment-329\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla2_wav.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-329\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla2_wav-300x131.png\" alt=\"\" width=\"300\" height=\"131\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla2_wav-300x131.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla2_wav.avif 563w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-329\" class=\"wp-caption-text\">Tabla 2 \u2013 Resultados obtenidos alterando la wavelet y su momento de fuga.<\/figcaption><\/figure>\n<figure id=\"attachment_330\" aria-describedby=\"caption-attachment-330\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig13.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-330\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig13-300x48.png\" alt=\"\" width=\"300\" height=\"48\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig13-300x48.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig13-768x122.png 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig13-1024x162.png 1024w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig13-604x96.png 604w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig13.avif 1300w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-330\" class=\"wp-caption-text\">Figura 13 \u2013 Canales RGB de la imagen SIN ruido -&gt; sym8, N=4.<\/figcaption><\/figure>\n<figure id=\"attachment_331\" aria-describedby=\"caption-attachment-331\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig14.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-331\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig14-300x47.png\" alt=\"\" width=\"300\" height=\"47\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig14-300x47.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig14-768x121.png 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig14-1024x161.png 1024w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig14-604x95.png 604w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig14.avif 1298w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-331\" class=\"wp-caption-text\">Figura 14 \u2013 Canales RGB de la imagen SIN ruido -&gt; bior3.5, N=4.<\/figcaption><\/figure>\n<p>El mejor PSNR lo obtiene la wavelet bior3.5 aunque el resultado visualmente no es del todo satisfactorio, ya que contiene demasiado ruido como se puede ver en la figura 14. Hay varias wavelets que han dado resultados satisfactorios pero en este caso la mejor ha sido la configuraci\u00f3n sym8, N=4.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Compresion_de_imagenes\"><\/span>Compresi\u00f3n de im\u00e1genes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Utilizaremos la funci\u00f3n <em>wdencmp<\/em> ya que nos permite mayor flexibilidad a la hora manejar los par\u00e1metros de compresi\u00f3n. Esta funci\u00f3n sirve tanto para comprimir como para eliminar ruido, aunque nosotros la utilizaremos para lo primero. Su estructura es la siguiente:<\/p>\n<p style=\"text-align: center;\"><strong>[XC,CXC,LXC,PERF0,PERFL2] =&nbsp;wdencmp(Opt=lvd,Se\u00f1al,<em>Wavelet<\/em>,N,THR,SORH)<\/strong><\/p>\n<p style=\"text-align: center;\"><strong>[XC,CXC,LXC,PERF0,PERFL2] =&nbsp;wdencmp(Opt=gbl,Se\u00f1al,<em>Wavelet<\/em>,N,THR,SORH,KEEPAPP)<\/strong><\/p>\n<p>Par\u00e1metros obtenidos:<\/p>\n<ul>\n<li><strong>XC<\/strong>: imagen resultante de la compresi\u00f3n.<\/li>\n<li><strong>CXC<\/strong>: par\u00e1metro de descomposici\u00f3n de la wavelet.<\/li>\n<li><strong>LXC<\/strong>: par\u00e1metro de descomposici\u00f3n de la wavelet.<\/li>\n<li><strong>PERF0<\/strong>: Coeficientes nulos.<\/li>\n<li><strong>PERFL2<\/strong>: Factor de compresi\u00f3n.<\/li>\n<\/ul>\n<p>Par\u00e1metros elegidos:<\/p>\n<ul>\n<li><strong>Opt<\/strong>: Par\u00e1metro que indica el tipo de umbral (threshold) a utilizar. Puede ser global (gbl) o dependiente del nivel (lvd).<\/li>\n<li><strong>Se\u00f1al<\/strong>: Matriz que contiene la se\u00f1al a procesar.<\/li>\n<li><strong>Wavelet<\/strong>: Wavelet a utilizar.<\/li>\n<li><strong>N<\/strong>: Nivel de compresi\u00f3n.<\/li>\n<li><strong>THR<\/strong>: Umbral.<\/li>\n<li><strong>SORH<\/strong>:Tipo de umbral suave (s) o fuerte (h).<\/li>\n<li><strong>KEEPAPP<\/strong>: Si su valor es 1, los coeficientes de aproximaci\u00f3n no se umbralizan. Solo lo utilizamos cuando opt=gbl.<\/li>\n<\/ul>\n<p>C\u00f3digo utilizado para la compresi\u00f3n:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"matlab\">case 1\n        opt = 'lvd';\n        thr_h = [17 18];    % Horizontal thresholds.\n        thr_d = [19 20];    % Diagonal thresholds.\n        thr_v = [21 22];    % Vertical thresholds. \n        thr = [thr_h ; thr_d ; thr_v];\n        redChannel = Imagen_Inicial(:, :, 1);\n        greenChannel = Imagen_Inicial(:, :, 2);\n        blueChannel = Imagen_Inicial(:, :, 3);\n        %Al utilizar thr como matrix n=2, de lo contrario dar\u00e1 error.\n        [xdr,cxd2r,lxd2r,perf0r,perfl2r] = wdencmp(opt,redChannel,tipowave,2,thr,sorh);\n        [xdg,cxd2g,lxd2g,perf0g,perfl2g] = wdencmp(opt,greenChannel,tipowave,2,thr,sorh);\n        [xdb,cxd2b,lxd2b,perf0b,perfl2b] = wdencmp(opt,blueChannel,tipowave,2,thr,sorh);\n        xd = cat(3, xdr, xdg, xdb);\n        perf0 = (1\/3)*(perf0r+perf0g+perf0b);\n        perfl2 = (1\/3)*(perfl2r+perfl2g+perfl2b);\n        xd=uint8(xd);\ncase 2 \n        opt = 'gbl';\n        [c s] = wavedec2(Imagen_Inicial,n,char(tipowave));\n        thr=20;\n        [xd,cxd,lxd,perf0,perfl2] = wdencmp(opt,c,s,tipowave,n,thr,sorh,1);\n        xd=uint8(xd);\n<\/pre>\n<p>En la opci\u00f3n dependiente del nivel (lvd), el umbral (thr) es una matriz 3 por N por lo que en este caso utilizaremos N=2. Otra particularidad radica en que trabajamos directamente sobre la se\u00f1al a procesar, de modo que para optimizar el resultado separamos los canales RGB de la imagen y los procesamos por separado.<\/p>\n<p>En la opci\u00f3n global (gbl), se descompone la imagen a procesar mediante la funci\u00f3n <em>wavedec2 <\/em>(descomposici\u00f3n 2D multinivel), a la que le pasamos la se\u00f1al a procesar, el nivel de descomposici\u00f3n (N) y la wavelet. La funci\u00f3n nos devuelve el vector de descomposici\u00f3n (C) y la matriz de seguimiento de cada componente (S) que ser\u00e1n los par\u00e1metros que usaremos en <em>wdencmp<\/em>.<\/p>\n<p style=\"text-align: center;\"><strong>[C,S] = wavedec2(Se\u00f1al,N,&#8217;wname&#8217;)<\/strong><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Resultados_obtenidos\"><\/span>Resultados obtenidos<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<figure id=\"attachment_334\" aria-describedby=\"caption-attachment-334\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla3_wav.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-334\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla3_wav-300x133.png\" alt=\"\" width=\"300\" height=\"133\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla3_wav-300x133.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla3_wav-604x270.png 604w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla3_wav.avif 625w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-334\" class=\"wp-caption-text\">Tabla 3 \u2013 Resultados obtenidos alterando el umbral.<\/figcaption><\/figure>\n<p>De la tabla 3 podemos llegar a varias conclusiones. La primera de ellas es que un umbral suave obtiene mejor relaci\u00f3n de compresi\u00f3n que uno duro, aunque el umbral duro tiene mejor calidad de imagen. La segunda hace referencia al momento de fuga (<em>vanishing moment<\/em>) de las wavelets, de modo que cuanto menor es el momento de fuga, mejores resultados de compresi\u00f3n se obtienen.<\/p>\n<p>Ahora haremos lo mismo pero alterando el nivel de compresi\u00f3n. Los resultados se muestran en la tabla 4.<\/p>\n<figure id=\"attachment_335\" aria-describedby=\"caption-attachment-335\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla4_wav.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-335\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla4_wav-300x116.png\" alt=\"\" width=\"300\" height=\"116\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla4_wav-300x116.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla4_wav-604x234.png 604w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla4_wav.avif 617w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-335\" class=\"wp-caption-text\">Tabla 4 \u2013 Resultados obtenidos alterando el nivel.<\/figcaption><\/figure>\n<p>Alterando el nivel logramos una relaci\u00f3n de compresi\u00f3n del 58,21%. A medida que aumenta el nivel la calidad de la imagen baja considerablemente por lo que una elecci\u00f3n razonable ser\u00eda elegir un nivel de compresi\u00f3n de 2 que ya nos reduce el tama\u00f1o de la imagen a la mitad.<\/p>\n<figure id=\"attachment_336\" aria-describedby=\"caption-attachment-336\" style=\"width: 294px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig15.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-336\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig15-294x300.png\" alt=\"\" width=\"294\" height=\"300\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig15-294x300.png 294w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig15-264x270.png 264w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/fig15.avif 573w\" sizes=\"auto, (max-width: 294px) 100vw, 294px\" \/><\/a><figcaption id=\"caption-attachment-336\" class=\"wp-caption-text\">Figura 15 \u2013 Resultado de la compresi\u00f3n rbio1.1 nivel 2.<\/figcaption><\/figure>\n<h2><span class=\"ez-toc-section\" id=\"Codigo_Matlab\"><\/span>C\u00f3digo Matlab<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"matlab\">%{\n---------------------------------------------------------------------------\nEN: TS Signal Processor 1.0 developed by Garikoitz Martinez Moreno for the \n    Signal Processing course. Year 2015\/2016\nES: TS Signal Processor desarrolado por Garikoitz Martinez Moreno para la\n    asignatura de Procesado de Se\u00f1ales. A\u00f1o 2015\/2016\n---------------------------------------------------------------------------\nCompile: mcc -mve TSSP.m\n%}\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%FORMULARIO PRINCIPAL\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\nfunction varargout = TSSP(varargin)\ngui_Singleton = 1;\ngui_State = struct('gui_Name',       mfilename, ...\n                   'gui_Singleton',  gui_Singleton, ...\n                   'gui_OpeningFcn', @TSSP_OpeningFcn, ...\n                   'gui_OutputFcn',  @TSSP_OutputFcn, ...\n                   'gui_LayoutFcn',  [] , ...\n                   'gui_Callback',   []);\nif nargin &amp;&amp; ischar(varargin{1})\n    gui_State.gui_Callback = str2func(varargin{1});\nend\n\nif nargout\n    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});\nelse\n    gui_mainfcn(gui_State, varargin{:});\nend\nfunction TSSP_OpeningFcn(hObject, eventdata, handles, varargin)\nhandles.output = hObject;\n% Update handles structure\nguidata(hObject, handles);\nmovegui(hObject,'center');\n%set(gcf, 'Position', get(0,'Screensize'));\n%\nif strcmp(get(hObject,'Visible'),'off')\n    axes(handles.axes1);\n    plot(rand(5));\n    cla;\n    set(gca,'fontsize',7)\n    %No muestre valores ejes\n    set(gca,'xtick',[]);\n    set(gca,'ytick',[]);\nend\n%Load the TS Signals\ntry\n    %Load images\n    set(handles.popupmenu1,'String','');\n    Files=dir('TS_Signals\\*.dat');\n    if numel(Files) &gt; 0\n      for k=1:length(Files)\n         FileNames{k} = Files(k).name;\n      end\n      set(handles.popupmenu1,'String',FileNames);\n    else\n        set(handles.edit1, 'String', 'ERROR: TS_Signals\\ folder is empty');\n        set(handles.signaltools,'Enable','off');\n    end\n  set(handles.popupmenu_wavelet,'String',{'haar','db','sym','coif','bior','rbio'});\n    set(handles.popupmenu_wavelet,'Value',6);\n    set(handles.popupmenu_wavlevel,'String',{'1.1','1.3','1.5','2.2','2.4','2.6','2.8','3.1','3.3','3.5'});\n  set(handles.popupmenu_thr,'String',{'lvd','gbl'});\n    set(handles.popupmenu_thr,'Value',2);\n    set(handles.popupmenu_thrsorh,'String',{'s','h'});\n    set(handles.popupmenu_thrsorh,'Value',1);\n    set(handles.popupmenu_noisetype,'String',{'gaussian','salt &amp; pepper','speckle'})\n    set(handles.popupmenu_noiseval,'String',{'0.01','0.02','0.05','0.08','0.1','0.5'});\n    set(handles.popupmenu_noisetype,'Value',3);\n    set(handles.popupmenu_noiseval,'Value',4);\n    %\n    a = get(handles.slider_level,'Value');\n    set(handles.edit_level,'string',strcat('Level',{' '},num2str(round(a))));\n    %\n    set(handles.pushbutton6_noise, 'Enable', 'off');\n    set(handles.pushbutton7_denoise, 'Enable', 'off');\n    set(handles.pushbutton8_compress, 'Enable', 'off');\n    set(handles.addnoise, 'Enable', 'off');\n    set(handles.denoisesignal, 'Enable', 'off');\n    set(handles.compression, 'Enable', 'off');\n    %\n    popupmenu_wavelet_Callback(hObject,eventdata,handles);\n catch me\n    h = msgbox(me.message, 'Error','error');\nend\nfunction varargout = TSSP_OutputFcn(hObject, eventdata, handles)\nvarargout{1} = handles.output;\n%--------------------------------------------------------------------------\n%FUNCI\u00d3N VARIABLES GLOBALES\n%--------------------------------------------------------------------------\nfunction setGlobal(file,dir)\nglobal filenameglobal\nglobal dirglobal\nfilenameglobal = file;\ndirglobal = dir;\nfunction r = getGlobalf\nglobal filenameglobal\nr = filenameglobal;\nfunction s = getGlobald\nglobal dirglobal\ns = dirglobal;\n%--------------------------------------------------------------------------\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%CREACI\u00d3N DE OBJETOS\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\nfunction popupmenu1_CreateFcn(hObject, eventdata, handles)\ntry\n    if ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n        set(hObject,'BackgroundColor','white');\n    end\ncatch me\n     h = msgbox({me.identifier me.message}, 'Error','error');\nend\nfunction edit1_CreateFcn(hObject, eventdata, handles)\ntry\n    if ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n        set(hObject,'BackgroundColor','white');\n    end\ncatch me\n    h = msgbox(me.message, 'Error','error');\nend\nfunction edit2_CreateFcn(hObject, eventdata, handles)\n% hObject    handle to edit2 (see GCBO)\n% eventdata  reserved - to be defined in a future version of MATLAB\n% handles    empty - handles not created until after all CreateFcns called\n% Hint: edit controls usually have a white background on Windows.\n%       See ISPC and COMPUTER.\ntry\n    if ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n        set(hObject,'BackgroundColor','white');\n    end\ncatch me\n    h = msgbox(me.message, 'Error','error');\nend\nfunction edit3_CreateFcn(hObject, eventdata, handles)\nif ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor','white');\nend\nfunction edit4_CreateFcn(hObject, eventdata, handles)\nif ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor','white');\nend\nfunction edit5_CreateFcn(hObject, eventdata, handles)\nif ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor','white');\nend\nfunction edit7_CreateFcn(hObject, eventdata, handles)\nif ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor','white');\nend\nfunction edit_info_CreateFcn(hObject, eventdata, handles)\nif ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor','white');\nend\nfunction popupmenu_wavelet_CreateFcn(hObject, eventdata, handles)\nif ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor','white');\nend\nfunction edit_level_CreateFcn(hObject, eventdata, handles)\nif ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor','white');\nend\nfunction popupmenu_wavlevel_CreateFcn(hObject, eventdata, handles)\nif ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor','white');\nend\nfunction slider_level_CreateFcn(hObject, eventdata, handles)\n% hObject    handle to slider_level (see GCBO)\n% eventdata  reserved - to be defined in a future version of MATLAB\n% handles    empty - handles not created until after all CreateFcns called\n\n% Hint: slider controls usually have a light gray background.\nif isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor',[.9 .9 .9]);\n    %\nend\nfunction edit_typethr_CreateFcn(hObject, eventdata, handles)\n\nif ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor','white');\nend\nfunction popupmenu_thr_CreateFcn(hObject, eventdata, handles)\nif ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor','white');\nend\nfunction edit9_Callback(hObject, eventdata, handles)\nfunction edit9_CreateFcn(hObject, eventdata, handles)\n% hObject    handle to edit9 (see GCBO)\n% eventdata  reserved - to be defined in a future version of MATLAB\n% handles    empty - handles not created until after all CreateFcns called\n\n% Hint: edit controls usually have a white background on Windows.\n%       See ISPC and COMPUTER.\nif ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor','white');\nend\nfunction popupmenu_thrsorh_CreateFcn(hObject, eventdata, handles)\nif ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor','white');\nend\nfunction popupmenu_noiseval_CreateFcn(hObject, eventdata, handles)\nif ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor','white');\nend\nfunction popupmenu_noisetype_CreateFcn(hObject, eventdata, handles)\nif ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor','white');\nend\nfunction edit11_CreateFcn(hObject, eventdata, handles)\nif ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor','white');\nend\nfunction edit12_CreateFcn(hObject, eventdata, handles)\nif ispc &amp;&amp; isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))\n    set(hObject,'BackgroundColor','white');\nend\n\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n%EVENTOS DE OBJETOS\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\nfunction CloseMenuItem_Callback(hObject, eventdata, handles)\n% hObject    handle to CloseMenuItem (see GCBO)\n% eventdata  reserved - to be defined in a future version of MATLAB\n% handles    structure with handles and user data (see GUIDATA)\ntry\nselection = questdlg(['Close the program?'],...\n                     ['Close '],...\n                     'Yes','No','Yes');\nif strcmp(selection,'No')\n    return;\nend\ndelete(handles.figure1)\ncatch me\n    h = msgbox(me.message, 'Error','error');\nend\nfunction popupmenu1_Callback(hObject, eventdata, handles)\n% hObject    handle to popupmenu1 (see GCBO)\n% eventdata  reserved - to be defined in a future version of MATLAB\n% handles    structure with handles and user data (see GUIDATA)\ntry\npopup_sel_index = get(handles.popupmenu1, 'Value');\npopup_string = get(handles.popupmenu1, 'String');\nselection = popup_string{popup_sel_index};\nsetGlobal(selection,'TS_Signals\\');\nfilename = strcat('TS_Signals\\', selection);\nf = fopen(filename);\nc = textscan(f,'%d %d %f','CollectOutput',1);\nfclose(f);\nImag = accumarray(c{1},c{2}); % M (filas) y la segunda a  N (columnas)\nImag = imrotate(Imag,90);\naxes(handles.axes1);\ncla;\nimage(Imag,'CDataMapping','scaled')\nset(gca,'xtick',[]);\nset(gca,'ytick',[]);\nmsg = strcat('RAW Signal -',{' '}, selection);\nset(handles.edit1, 'String', msg); \n%--------------------------------------------------------------------------\n%Save the image\npopup_sel_index = get(handles.popupmenu1, 'Value');\npopup_string = get(handles.popupmenu1, 'String');\nselection = popup_string{popup_sel_index};\n[pathstr,name,ext] = fileparts(selection)\nF = getframe(handles.axes1);\nImage = frame2im(F);\nsv = strcat('TS_saved_files\\', name);\nsv = strcat(sv,'.png');\nimwrite(Image,sv,'png','TS_Signal processor',selection)\nset(handles.pushbutton6_noise, 'Enable', 'on');\nset(handles.pushbutton8_compress, 'Enable', 'on');\nset(handles.addnoise, 'Enable', 'on');\nset(handles.compression, 'Enable', 'on');\n\n%--------------------------------------------------------------------------\ncatch me\n     h = msgbox({me.identifier me.message}, 'Error','error');\nend\n%--------------------------------------------------------------------------\n%MEN\u00da ABRIR SE\u00d1AL\nfunction opentssignal_Callback(hObject, eventdata, handles)\n% hObject    handle to opentssignal (see GCBO)\n% eventdata  reserved - to be defined in a future version of MATLAB\n% handles    structure with handles and user data (see GUIDATA)\ntry\naxes(handles.axes1);\ncla;\n[filename, pathname] = uigetfile('*.dat','Select the TS Signal');\nif ~isequal(filename, 0)\n    setGlobal(filename,pathname);\n    f = fopen(strcat(pathname, filename));\n    c = textscan(f,'%d %d %f','CollectOutput',1);\n    fclose(f);\n    Imag = accumarray(c{1},c{2}); % M (filas) y la segunda a  N (columnas)\n    Imag = imrotate(Imag,90);\n    axes(handles.axes1);\n    cla;\n    image(Imag,'CDataMapping','scaled')\n    set(gca,'xtick',[]);\n    set(gca,'ytick',[]);\n    msg = strcat('RAW Signal -',{' '}, filename);\n    set(handles.edit1, 'String', msg);\n    %----------------------------------------------------------------------\n    %Save the image\n    [pathstr,name,ext] = fileparts(filename)\n    F = getframe(handles.axes1);\n    Image = frame2im(F);\n    sv = strcat('TS_saved_files\\', name);\n    sv = strcat(sv,'.png');\n    imwrite(Image,sv,'png','TS_Signal processor',filename)\n    set(handles.pushbutton6_noise, 'Enable', 'on');\n    set(handles.pushbutton8_compress, 'Enable', 'on');\n    set(handles.addnoise, 'Enable', 'on');\n    set(handles.compression, 'Enable', 'on');\n    %----------------------------------------------------------------------\nend\nmsgmnu = strcat('RAW Signal -',{' '}, filename);\nset(handles.edit1, 'String', msgmnu); \n%-----------------------------------------------------\ncatch me\n     h = msgbox({me.identifier me.message}, 'Error','error');\nend\n%--------------------------------------------------------------------------\n%MEN\u00da ACERCA DE\nfunction about_Callback(hObject, eventdata, handles)\n% hObject    handle to about (see GCBO)\n% eventdata  reserved - to be defined in a future version of MATLAB\n% handles    structure with handles and user data (see GUIDATA)\n%h = msgbox('TS Signal Processor by GMM');\ntry\n[cdata,map] = imread('TS_files\\icon.png'); \n h=msgbox({'TS Signal Processor 1.0','Developed by Garikoitz Martinez',...\n            'UNED\/UCM Signal Processing Course 2015\/16'},'About','custom',cdata,summer);\ncatch me\n   h = msgbox({me.identifier me.message}, 'Error','error');\nend\n%--------------------------------------------------------------------------\n%MEN\u00da GUARDAR FIGURA\nfunction savefig_Callback(hObject, eventdata, handles)\n% hObject    handle to savefig (see GCBO)\n% eventdata  reserved - to be defined in a future version of MATLAB\n% handles    structure with handles and user data (see GUIDATA)\ntry\n    selection=getGlobalf;\n    pathstr=getGlobald;\n    [pathstr,name,ext] = fileparts(strcat(pathstr, selection))\n    F = getframe(handles.axes1);\n    Image = frame2im(F);\n    sv = strcat('TS_saved_files\\', name);\n    sv = strcat(sv,'.png');\n    imwrite(Image,sv,'png','TS_Signal processor',selection)\n    %--\ncatch me\n     h = msgbox({me.identifier me.message}, 'Error','error');\nend\n%--------------------------------------------------------------------------\n%MEN\u00da ELIMINAR RUIDO IMAGEN\nfunction denoisesignal_Callback(hObject, eventdata, handles)\n% hObject    handle to denoisesignal (see GCBO)\n% eventdata  reserved - to be defined in a future version of MATLAB\n% handles    structure with handles and user data (see GUIDATA)\ntry\n    tipowaveid = get(handles.popupmenu_wavelet,'String');\n    tipowave = tipowaveid{get(handles.popupmenu_wavelet,'Value')};\n    levelid = get(handles.popupmenu_wavlevel,'String');\n    level = levelid{get(handles.popupmenu_wavlevel,'Value')};\n    switch get(handles.popupmenu_wavelet,'Value') \n      case 2 \n          tipowave=strcat(tipowave,level);\n      case 3 \n          tipowave=strcat(tipowave,level);\n      case 4 \n          tipowave=strcat(tipowave,level);\n      case 5 \n          tipowave=strcat(tipowave,level);\n      case 6 \n          tipowave=strcat(tipowave,level);\n      case 9 \n          tipowave=strcat(tipowave,level);\n      case 12 \n          tipowave=strcat(tipowave,level);\n      case 13 \n          tipowave=strcat(tipowave,level);\n      case 14 \n          tipowave=strcat(tipowave,level);\n      case 15 \n          tipowave=strcat(tipowave,level);\n      otherwise\n    end \nselection=getGlobalf;\npathstr=getGlobald;\n[pathstr,name,ext] = fileparts(strcat(pathstr, selection))\nfilename = strcat('TS_saved_files\\', name);\nfilename = strcat(filename, '_denoised.png');\nsv = strcat('TS_saved_files\\', name);\nsr = strcat(sv,'.png');\nsv = strcat(sv,'_noisy.png');\nif exist(sv, 'file')\n    [SinRuido smap] = imread(sr);\n    [ConRuido cmap] = imread(sv);\n    %\n    red = ConRuido(:, :, 1);\n    green = ConRuido(:, :, 2);\n    blue = ConRuido(:, :, 3);\n    %\n    %cmap = colormap(handles.axes1);\n    n = round(get(handles.slider_level,'Value'));\n    %[c l] = wavedec2(ConRuido,n,tipowave);\n    thrsorhid = get(handles.popupmenu_thrsorh,'String');\n    thrsorh = thrsorhid{get(handles.popupmenu_thrsorh,'Value')};\n    switch get(handles.popupmenu_thrsorh,'Value') \n      case 1\n          sorh = 's';\n          threshold = 'Thresholding type = Soft ';\n      case 2 \n          sorh = 'h';\n          threshold = 'Thresholding type = Hard ';\n      otherwise\n    end \n    thrtid = get(handles.popupmenu_thrsorh,'String');\n    thrt = thrtid{get(handles.popupmenu_thrsorh,'Value')};\n%DWT-----------------------------------------------------------------------\n        figure('name','Noisy DWT RGB decomposition'); \n        set(gcf, 'Position', get(0,'Screensize'));\n        redChannel = ConRuido(:, :, 1);\n        greenChannel = ConRuido(:, :, 2);\n        blueChannel = ConRuido(:, :, 3);\n        subplot(4,4,1); imshow(ConRuido);title('Noisy image');\n        subplot(4,4,2); imshow(redChannel);title('Red Channel');\n        subplot(4,4,3); imshow(greenChannel);title('Green Channel');\n        subplot(4,4,4); imshow(blueChannel);title('Blue Channel');\n        %aR\n        [CA,CH,CV,CD] = dwt2(redChannel,tipowave);\n        subplot(4,4,5); imshow(CA\/255);title('CA redChannel');\n        subplot(4,4,6); imshow(CH\/255);title('CH redChannel');\n        subplot(4,4,7); imshow(CV\/255);title('CV redChannel');\n        subplot(4,4,8); imshow(CD\/255);title('CD redChannel');\n        noiselev = median(abs(CD(:)))\/0.6745;\n        thresh = sqrt(2*log(numel(redChannel)))*noiselev;\n        clear CA, clear CH, clear CV, clear CD;\n        [c,l] = wavedec2(redChannel,n,tipowave);\n        Y = wthresh(c(prod(l(1,:))+1:end),'h',thresh);\n        c_n = c;\n        c_n(prod(l(1,:))+1:end) = Y;\n        aR=waverec2(c_n,l,tipowave);\n        %aG\n        [CA,CH,CV,CD] = dwt2(greenChannel,tipowave);\n        subplot(4,4,9); imshow(CA\/255);title('CA greenChannel');\n        subplot(4,4,10); imshow(CH\/255);title('CH greenChannel');\n        subplot(4,4,11); imshow(CV\/255);title('CV greenChannel');\n        subplot(4,4,12); imshow(CD\/255);title('CD greenChannel');\n        noiselev = median(abs(CD(:)))\/0.6745;\n        thresh = sqrt(2*log(numel(greenChannel)))*noiselev;\n        clear CA, clear CH, clear CV, clear CD;\n        [c,l] = wavedec2(greenChannel,n,tipowave);\n        Y = wthresh(c(prod(l(1,:))+1:end),'h',thresh);\n        c_n = c;\n        c_n(prod(l(1,:))+1:end) = Y;\n        aG=waverec2(c_n,l,tipowave);\n        %aB\n        [CA,CH,CV,CD] = dwt2(blueChannel,tipowave);\n        subplot(4,4,13); imshow(CA\/255);title('CA blueChannel');\n        subplot(4,4,14); imshow(CH\/255);title('CH blueChannel');\n        subplot(4,4,15); imshow(CV\/255);title('CV blueChannel');\n        subplot(4,4,16); imshow(CD\/255);title('CD blueChannel');\n        noiselev = median(abs(CD(:)))\/0.6745;\n        thresh = sqrt(2*log(numel(blueChannel)))*noiselev;\n        clear CA, clear CH, clear CV, clear CD;\n        [c,l] = wavedec2(blueChannel,n,tipowave);\n        Y = wthresh(c(prod(l(1,:))+1:end),'h',thresh);\n        c_n = c;\n        c_n(prod(l(1,:))+1:end) = Y;\n        aB=waverec2(c_n,l,tipowave);\n        XDEN = cat(3, aR, aG, aB);\n        XDEN=uint8(XDEN);\n        tipowave=strcat(tipowave,' (DWT)');\n%--------------------------------------------------------------------------\n    Rs = SinRuido(:, :, 1);\n    Gs = SinRuido(:, :, 2);\n    Bs = SinRuido(:, :, 3);\n    Rc = ConRuido(:, :, 1);\n    Gc = ConRuido(:, :, 2);\n    Bc = ConRuido(:, :, 3);\n    Rd = XDEN(:, :, 1);\n    Gd = XDEN(:, :, 2);\n    Bd = XDEN(:, :, 3);\n    figure('name','Denoised channels comparison'); \n    set(gcf, 'Position', get(0,'Screensize'));\n    subplot(3,4,1); imshow(SinRuido);title('Original image');\n    subplot(3,4,2); imshow(Rs);title('Red Channel');\n    subplot(3,4,3); imshow(Gs);title('Green Channel');\n    subplot(3,4,4); imshow(Bs);title('Blue Channel');\n    subplot(3,4,5); imshow(SinRuido);title('Noisy image');\n    subplot(3,4,6); imshow(Rc);title('Red Channel');\n    subplot(3,4,7); imshow(Gc);title('Green Channel');\n    subplot(3,4,8); imshow(Bc);title('Blue Channel');\n    subplot(3,4,9); imshow(XDEN);title('Denoised image');\n    subplot(3,4,10); imshow(Rd);title('Red Channel');\n    subplot(3,4,11); imshow(Gd);title('Green Channel');\n    subplot(3,4,12); imshow(Bd);title('Blue Channel');\n    %----------------------------------------------------------------------\n    imwrite(XDEN,filename);\n    [imagen_final fmap]=imread(filename);\n    msg = strcat('Signal -',{' '}, selection);\n    msg = strcat(msg, ' denoised succesfully');\n    set(handles.edit_info, 'String', msg); \n    %Calcs\n    %http:\/\/es.mathworks.com\/help\/vision\/ref\/psnr.html\n    %http:\/\/homepages.inf.ed.ac.uk\/rbf\/CVonline\/LOCAL_COPIES\/VELDHUIZEN\/node18.html\n    signal = SinRuido(:);\n    noisy  = ConRuido(:);\n    denoised = imagen_final(:);\n    %\n    [rows columns ~] = size(ConRuido);\n    mseRImage = (double(ConRuido(:,:,1)) - double(imagen_final(:,:,1))) .^ 2;\n    mseGImage = (double(ConRuido(:,:,2)) - double(imagen_final(:,:,2))) .^ 2;\n    mseBImage = (double(ConRuido(:,:,3)) - double(imagen_final(:,:,3))) .^ 2;\n    mseR = sum(sum(mseRImage)) \/ (rows * columns);\n    mseG = sum(sum(mseGImage)) \/ (rows * columns);\n    mseB = sum(sum(mseBImage)) \/ (rows * columns);\n    mse = (1\/3)*(mseR + mseG + mseB);\n    psnr = 10 * log10( 255^2 \/ mse);\n    %----------------------------------------------------------------------\n    [rows2 columns2 ~] = size(SinRuido);\n    mseRImage2 = (double(SinRuido(:,:,1)) - double(ConRuido(:,:,1))) .^ 2;\n    mseGImage2 = (double(SinRuido(:,:,2)) - double(ConRuido(:,:,2))) .^ 2;\n    mseBImage2 = (double(SinRuido(:,:,3)) - double(ConRuido(:,:,3))) .^ 2;\n    mseR2 = sum(sum(mseRImage2)) \/ (rows2 * columns2);\n    mseG2 = sum(sum(mseGImage2)) \/ (rows2 * columns2);\n    mseB2 = sum(sum(mseBImage2)) \/ (rows2 * columns2);\n    mse2 = (1\/3)*(mseR2 + mseG2 + mseB2);\n    psnr2 = 10 * log10( 255^2 \/ mse2);\n    %Show results\n    figure('name','Results of noise removal'); \n    set(gcf, 'Position', get(0,'Screensize'));\n    str=''; str2='';\n    str = sprintf('Wavelet = %s\\n%s \\nPSNR = %.2fdB',strtrim(tipowave),strtrim(threshold),psnr);\n    str2 = sprintf('PSNR = %.2fdB',psnr2);\n    subplot(1,3,1);imshow(SinRuido,smap); title('Original Signal'); set(gca,'xtick',[]);set(gca,'ytick',[]);\n    subplot(1,3,2);imshow(ConRuido,cmap); title('Noisy Signal'); set(gca,'xtick',[]);set(gca,'ytick',[]); xlabel(str2);\n    subplot(1,3,3);imshow(imagen_final,fmap) ; title('Denoised Signal'); set(gca,'xtick',[]);set(gca,'ytick',[]); xlabel(str);\n    clear tipowave, clear snr, clear psnr, clear threshold, clear str;\nelse\n  % File does not exist.\n  warningMessage = sprintf('No existe la imagen con ruido:\\n%s', sv);\n  uiwait(msgbox(warningMessage));\nend\ncatch me\n    h = msgbox({me.identifier me.message}, 'Error denoising signal','Error');\nend\n%--------------------------------------------------------------------------\n%MEN\u00da A\u00d1ADIR RUIDO IMAGEN\nfunction addnoise_Callback(hObject, eventdata, handles)\ntry\n%A\u00f1adir ruido\n%https:\/\/en.wikipedia.org\/wiki\/Image_noise\n%https:\/\/es.mathworks.com\/matlabcentral\/answers\/76170-how-to-generate-background-noise-in-a-color-image\nselection = getGlobalf;\npathstr=getGlobald;\n[pathstr,name,ext] = fileparts(strcat(pathstr, selection))\nfilename = strcat('TS_saved_files\\', name);\nfilename = strcat(filename, '.png');\nImagen_Inicial = imread(filename);\ncmap = colormap(handles.axes1);%get colormap from fig\nnoiseid = get(handles.popupmenu_noisetype,'String');\nnoise = noiseid{get(handles.popupmenu_noisetype,'Value')};\nnvalid = get(handles.popupmenu_noiseval,'String');\nnval = nvalid{get(handles.popupmenu_noiseval,'Value')};\nConRuido = imnoise(Imagen_Inicial,noise,str2num(nval));\n%--------------------------------------------------------------------------\nmsg = strcat('Noise applied to image -',{' '}, selection);\nmsg = strcat(msg,' succesfully');\nset(handles.edit_info, 'String', msg); \n%--------------------------------------------------------------------------\n%Show results\nfigure('name','Add noise to signal'); \nset(gcf, 'Position', get(0,'Screensize'));\nsubplot(1,2,1);imshow(Imagen_Inicial); title('Original Signal'); set(gca,'xtick',[]);set(gca,'ytick',[]);\nsubplot(1,2,2);imshow(ConRuido) ; title('noisy Signal'); set(gca,'xtick',[]); set(gca,'ytick',[]);\n%Save the image\n[pathstr,name,ext] = fileparts(filename);\nsv = strcat('TS_saved_files\\', name);\nsv = strcat(sv,'_noisy.png');\nimwrite(ConRuido,cmap,sv);\nset(handles.denoisesignal, 'Enable', 'on');\nset(handles.pushbutton7_denoise, 'Enable', 'on');\n%\ncatch me\n     h = msgbox({me.identifier me.message}, 'Error adding noise','Error');\nend\n%--------------------------------------------------------------------------\n%MEN\u00da COMPRIMIR IMAGEN\nfunction compression_Callback(hObject, eventdata, handles)\n% hObject    handle to compression (see GCBO)\n% eventdata  reserved - to be defined in a future version of MATLAB\n% handles    structure with handles and user data (see GUIDATA)\n%\ntry\n    selection=getGlobalf;\n    pathstr=getGlobald;\n    [pathstr,name,ext] = fileparts(strcat(pathstr, selection));\n    filename = strcat('TS_saved_files\\', name);\n    filename = strcat(filename, '.png');\n    Imagen_Inicial = imread(filename);\n    cmap = colormap(handles.axes1);\n    tipowave='';\n    level='';\n    nivel='';\n    tipowaveid = get(handles.popupmenu_wavelet,'String');\n    tipowave = tipowaveid{get(handles.popupmenu_wavelet,'Value')};\n    levelid = get(handles.popupmenu_wavlevel,'String');\n    level = levelid{get(handles.popupmenu_wavlevel,'Value')};\n    switch get(handles.popupmenu_wavelet,'Value') \n      case 2 \n          tipowave=strcat(tipowave,level);\n      case 3 \n          tipowave=strcat(tipowave,level);\n      case 4 \n          tipowave=strcat(tipowave,level);\n      case 5 \n          tipowave=strcat(tipowave,level);\n      case 6 \n          tipowave=strcat(tipowave,level);\n      case 9 \n          tipowave=strcat(tipowave,level);\n      case 12 \n          tipowave=strcat(tipowave,level);\n      case 13 \n          tipowave=strcat(tipowave,level);\n      case 14 \n          tipowave=strcat(tipowave,level);\n      case 15 \n          tipowave=strcat(tipowave,level);\n      otherwise\n    end \n%--------------------------------------------------------------------------\n% Compresi\u00f3n usando WDENCMP.\n%http:\/\/read.pudn.com\/downloads103\/sourcecode\/book\/422976\/wavelet\/wavelet\/wdencmp.m__.htm\n%http:\/\/web.mit.edu\/1.130\/WebDocs\/1.130\/Software\/Examples\/example4.m\n%http:\/\/es.mathworks.com\/help\/wavelet\/examples\/data-compression-using-2d-wavelet-analysis.html\n%--------------------------------------------------------------------------\n    n = round(get(handles.slider_level,'Value'));      % Decomposition Level\n    [c l] = wavedec2(Imagen_Inicial,n,char(tipowave));  % Multilevel 2-D wavelet decomposition.\n    thrsorhid = get(handles.popupmenu_thrsorh,'String');\n    thrsorh = thrsorhid{get(handles.popupmenu_thrsorh,'Value')};\n    switch get(handles.popupmenu_thrsorh,'Value') \n      case 1\n          sorh = 's';\n          threshold = 'Thresholding type = Soft ';\n      case 2 \n          sorh = 'h';\n          threshold = 'Thresholding type = Hard ';\n      otherwise\n    end \n    thrtid = get(handles.popupmenu_thrsorh,'String');\n    thrt = thrtid{get(handles.popupmenu_thrsorh,'Value')};\n    switch get(handles.popupmenu_thr,'Value') \n      case 1\n        opt = 'lvd';\n        thr_h = [17 18];    % Horizontal thresholds.\n        thr_d = [19 20];    % Diagonal thresholds.\n        thr_v = [21 22];    % Vertical thresholds. \n        thr = [thr_h ; thr_d ; thr_v];\n        redChannel = Imagen_Inicial(:, :, 1);\n        greenChannel = Imagen_Inicial(:, :, 2);\n        blueChannel = Imagen_Inicial(:, :, 3);\n        [xdr,cxd2,lxd2,perf0,perfl2] = wdencmp(opt,redChannel,tipowave,n,thr,sorh);\n        [xdg,cxd2,lxd2,perf0,perfl2] = wdencmp(opt,greenChannel,tipowave,n,thr,sorh);\n        [xdb,cxd2,lxd2,perf0,perfl2] = wdencmp(opt,blueChannel,tipowave,n,thr,sorh);\n        xd = cat(3, xdr, xdg, xdb);\n        xd=uint8(xd);\n        threshold=strcat(threshold,' and Level-dependant.');\n      case 2 \n          opt = 'gbl';\n          thr=20;\n          [xd,cxd,lxd,perf0,perfl2] = wdencmp(opt,c,l,tipowave,n,thr,sorh,1);\n          xd=uint8(xd);\n          threshold=strcat(threshold,' and Global.');\n      otherwise\n    end \n    %----------------------------------------------------------------------\n    axes(handles.axes1);\n    set(gca,'xtick',[]);\n    set(gca,'ytick',[]);\n    [pathstr,name,ext] = fileparts(filename);\n    sv = strcat('TS_saved_files\\', name);\n    sv = strcat(sv,'_');\n    sv = strcat(sv,tipowave);\n    sv = strcat(sv,'_Level');\n    sv = strcat(sv,num2str(n));\n    sv = strcat(sv,'_thr_');\n    sv = strcat(sv,sorh);\n    sv = strcat(sv,'_');\n    sv = strcat(sv,opt);\n    sv = strcat(sv,'_compressed.png');\n    sv = regexprep(sv,{'\\.','png'},{'','.png'})\n    imwrite(xd,cmap,sv);\n    msg = strcat('Signal -',{' '}, selection);\n    set(handles.edit_info, 'String', msg); \n    %Show results\n    figure('name','Results of image compression'); \n    set(gcf, 'Position', get(0,'Screensize'));\n    Imagen_final = imread(sv);\n    cla;\n    subplot(2,1,1);image(Imagen_Inicial,'CDataMapping','scaled'); title('Original Signal'); set(gca,'xtick',[]);set(gca,'ytick',[]);\n    subplot(2,1,2);image(Imagen_final,'CDataMapping','scaled'); title('Compressed Signal'); set(gca,'xtick',[]);set(gca,'ytick',[]);\n    xlabel(sprintf('Wavelet = %s || Compression level = %d \\n %s \\nCompression score = %2.1f%% || Null coefficients = %2.1f%%',tipowave,n,threshold,perfl2,perf0))\ncatch me\n     h = msgbox({me.identifier me.message}, 'Error in compress button','error');\nend\n%--------------------------------------------------------------------------\n%BOT\u00d3N A\u00d1ADIR RUIDO IMAGEN\nfunction pushbutton6_noise_Callback(hObject, eventdata, handles)\n% hObject    handle to pushbutton6_noise (see GCBO)\n% eventdata  reserved - to be defined in a future version of MATLAB\n% handles    structure with handles and user data (see GUIDATA)\ntry\n%A\u00f1adir ruido\n%https:\/\/en.wikipedia.org\/wiki\/Image_noise\n%https:\/\/es.mathworks.com\/matlabcentral\/answers\/76170-how-to-generate-background-noise-in-a-color-image\nselection = getGlobalf;\npathstr=getGlobald;\n[pathstr,name,ext] = fileparts(strcat(pathstr, selection))\nfilename = strcat('TS_saved_files\\', name);\nfilename = strcat(filename, '.png');\nImagen_Inicial = imread(filename);\ncmap = colormap(handles.axes1);%get colormap from fig\nnoiseid = get(handles.popupmenu_noisetype,'String');\nnoise = noiseid{get(handles.popupmenu_noisetype,'Value')};\nnvalid = get(handles.popupmenu_noiseval,'String');\nnval = nvalid{get(handles.popupmenu_noiseval,'Value')};\nConRuido = imnoise(Imagen_Inicial,noise,str2num(nval));\n%--------------------------------------------------------------------------\nmsg = strcat('Noise applied to image -',{' '}, selection);\nmsg = strcat(msg,' succesfully');\nset(handles.edit_info, 'String', msg); \n%--------------------------------------------------------------------------\n%Show results\nfigure('name','Add noise to signal'); \nset(gcf, 'Position', get(0,'Screensize'));\nsubplot(1,2,1);imshow(Imagen_Inicial); title('Original Signal'); set(gca,'xtick',[]);set(gca,'ytick',[]);\nsubplot(1,2,2);imshow(ConRuido) ; title('noisy Signal'); set(gca,'xtick',[]); set(gca,'ytick',[]);\n%Save the image\n[pathstr,name,ext] = fileparts(filename);\n%F = getframe(handles.axes1);\n%Image = frame2im(F);\nsv = strcat('TS_saved_files\\', name);\nsv = strcat(sv,'_noisy.png');\nimwrite(ConRuido,cmap,sv);\nset(handles.pushbutton7_denoise, 'Enable', 'on');\nset(handles.denoisesignal, 'Enable', 'on');\ncatch me\n     h = msgbox({me.identifier me.message}, 'Error adding noise','Error');\nend\n%--------------------------------------------------------------------------\n%BOT\u00d3N ELIMINAR RUIDO IMAGEN\nfunction pushbutton7_denoise_Callback(hObject, eventdata, handles)\ntry\n    tipowaveid = get(handles.popupmenu_wavelet,'String');\n    tipowave = tipowaveid{get(handles.popupmenu_wavelet,'Value')};\n    levelid = get(handles.popupmenu_wavlevel,'String');\n    level = levelid{get(handles.popupmenu_wavlevel,'Value')};\n    switch get(handles.popupmenu_wavelet,'Value') \n      case 2 \n          tipowave=strcat(tipowave,level);\n      case 3 \n          tipowave=strcat(tipowave,level);\n      case 4 \n          tipowave=strcat(tipowave,level);\n      case 5 \n          tipowave=strcat(tipowave,level);\n      case 6 \n          tipowave=strcat(tipowave,level);\n      case 9 \n          tipowave=strcat(tipowave,level);\n      case 12 \n          tipowave=strcat(tipowave,level);\n      case 13 \n          tipowave=strcat(tipowave,level);\n      case 14 \n          tipowave=strcat(tipowave,level);\n      case 15 \n          tipowave=strcat(tipowave,level);\n      otherwise\n    end \nselection=getGlobalf;\npathstr=getGlobald;\n[pathstr,name,ext] = fileparts(strcat(pathstr, selection))\nfilename = strcat('TS_saved_files\\', name);\nfilename = strcat(filename, '_denoised.png');\nsv = strcat('TS_saved_files\\', name);\nsr = strcat(sv,'.png');\nsv = strcat(sv,'_noisy.png');\nif exist(sv, 'file')\n    [SinRuido smap] = imread(sr);\n    [ConRuido cmap] = imread(sv);\n    %\n    red = ConRuido(:, :, 1);\n    green = ConRuido(:, :, 2);\n    blue = ConRuido(:, :, 3);\n    %\n    n = round(get(handles.slider_level,'Value'));\n    thrsorhid = get(handles.popupmenu_thrsorh,'String');\n    thrsorh = thrsorhid{get(handles.popupmenu_thrsorh,'Value')};\n    switch get(handles.popupmenu_thrsorh,'Value') \n      case 1\n          sorh = 's';\n          threshold = 'Thresholding type = Soft ';\n      case 2 \n          sorh = 'h';\n          threshold = 'Thresholding type = Hard ';\n      otherwise\n    end \n    thrtid = get(handles.popupmenu_thrsorh,'String');\n    thrt = thrtid{get(handles.popupmenu_thrsorh,'Value')};\n%DWT-----------------------------------------------------------------------\n        figure('name','Noisy DWT RGB decomposition'); \n        set(gcf, 'Position', get(0,'Screensize'));\n        redChannel = ConRuido(:, :, 1);\n        greenChannel = ConRuido(:, :, 2);\n        blueChannel = ConRuido(:, :, 3);\n        subplot(4,4,1); imshow(ConRuido);title('Noisy image');\n        subplot(4,4,2); imshow(redChannel);title('Red Channel');\n        subplot(4,4,3); imshow(greenChannel);title('Green Channel');\n        subplot(4,4,4); imshow(blueChannel);title('Blue Channel');\n        %aR\n        [CA,CH,CV,CD] = dwt2(redChannel,tipowave);\n        subplot(4,4,5); imshow(CA\/255);title('CA redChannel');\n        subplot(4,4,6); imshow(CH\/255);title('CH redChannel');\n        subplot(4,4,7); imshow(CV\/255);title('CV redChannel');\n        subplot(4,4,8); imshow(CD\/255);title('CD redChannel');\n        noiselev = median(abs(CD(:)))\/0.6745;\n        thresh = sqrt(2*log(numel(redChannel)))*noiselev;\n        clear CA, clear CH, clear CV, clear CD;\n        [c,l] = wavedec2(redChannel,n,tipowave);\n        Y = wthresh(c(prod(l(1,:))+1:end),sorh,thresh);\n        c_n = c;\n        c_n(prod(l(1,:))+1:end) = Y;\n        aR=waverec2(c_n,l,tipowave);\n        %aG\n        [CA,CH,CV,CD] = dwt2(greenChannel,tipowave);\n        subplot(4,4,9); imshow(CA\/255);title('CA greenChannel');\n        subplot(4,4,10); imshow(CH\/255);title('CH greenChannel');\n        subplot(4,4,11); imshow(CV\/255);title('CV greenChannel');\n        subplot(4,4,12); imshow(CD\/255);title('CD greenChannel');\n        noiselev = median(abs(CD(:)))\/0.6745;\n        thresh = sqrt(2*log(numel(greenChannel)))*noiselev;\n        clear CA, clear CH, clear CV, clear CD;\n        [c,l] = wavedec2(greenChannel,n,tipowave);\n        Y = wthresh(c(prod(l(1,:))+1:end),sorh,thresh);\n        c_n = c;\n        c_n(prod(l(1,:))+1:end) = Y;\n        aG=waverec2(c_n,l,tipowave);\n        %aB\n        [CA,CH,CV,CD] = dwt2(blueChannel,tipowave);\n        subplot(4,4,13); imshow(CA\/255);title('CA blueChannel');\n        subplot(4,4,14); imshow(CH\/255);title('CH blueChannel');\n        subplot(4,4,15); imshow(CV\/255);title('CV blueChannel');\n        subplot(4,4,16); imshow(CD\/255);title('CD blueChannel');\n        noiselev = median(abs(CD(:)))\/0.6745;\n        thresh = sqrt(2*log(numel(blueChannel)))*noiselev;\n        clear CA, clear CH, clear CV, clear CD;\n        [c,l] = wavedec2(blueChannel,n,tipowave);\n        Y = wthresh(c(prod(l(1,:))+1:end),sorh,thresh);\n        c_n = c;\n        c_n(prod(l(1,:))+1:end) = Y;\n        aB=waverec2(c_n,l,tipowave);\n        XDEN = cat(3, aR, aG, aB);\n        XDEN=uint8(XDEN);\n        tipowave=strcat(tipowave,' (DWT)');\n%--------------------------------------------------------------------------\n    Rs = SinRuido(:, :, 1);\n    Gs = SinRuido(:, :, 2);\n    Bs = SinRuido(:, :, 3);\n    Rc = ConRuido(:, :, 1);\n    Gc = ConRuido(:, :, 2);\n    Bc = ConRuido(:, :, 3);\n    Rd = XDEN(:, :, 1);\n    Gd = XDEN(:, :, 2);\n    Bd = XDEN(:, :, 3);\n    figure('name','Denoised channels comparison'); \n    set(gcf, 'Position', get(0,'Screensize'));\n    subplot(3,4,1); imshow(SinRuido);title('Original image');\n    subplot(3,4,2); imshow(Rs);title('Red Channel');\n    subplot(3,4,3); imshow(Gs);title('Green Channel');\n    subplot(3,4,4); imshow(Bs);title('Blue Channel');\n    subplot(3,4,5); imshow(ConRuido);title('Noisy image');\n    subplot(3,4,6); imshow(Rc);title('Red Channel');\n    subplot(3,4,7); imshow(Gc);title('Green Channel');\n    subplot(3,4,8); imshow(Bc);title('Blue Channel');\n    subplot(3,4,9); imshow(XDEN);title('Denoised image');\n    subplot(3,4,10); imshow(Rd);title('Red Channel');\n    subplot(3,4,11); imshow(Gd);title('Green Channel');\n    subplot(3,4,12); imshow(Bd);title('Blue Channel');\n    %----------------------------------------------------------------------\n    imwrite(XDEN,filename);\n    [imagen_final fmap]=imread(filename);\n    msg = strcat('Signal -',{' '}, selection);\n    msg = strcat(msg, ' denoised succesfully');\n    set(handles.edit_info, 'String', msg); \n    %Calcs\n    %http:\/\/es.mathworks.com\/help\/vision\/ref\/psnr.html\n    %http:\/\/homepages.inf.ed.ac.uk\/rbf\/CVonline\/LOCAL_COPIES\/VELDHUIZEN\/node18.html\n    signal = SinRuido(:);\n    noisy  = ConRuido(:);\n    denoised = imagen_final(:);\n    %CALCULA ERRORES\n    [rows columns ~] = size(ConRuido);\n    mseRImage = (double(ConRuido(:,:,1)) - double(imagen_final(:,:,1))) .^ 2;\n    mseGImage = (double(ConRuido(:,:,2)) - double(imagen_final(:,:,2))) .^ 2;\n    mseBImage = (double(ConRuido(:,:,3)) - double(imagen_final(:,:,3))) .^ 2;\n    mseR = sum(sum(mseRImage)) \/ (rows * columns);\n    mseG = sum(sum(mseGImage)) \/ (rows * columns);\n    mseB = sum(sum(mseBImage)) \/ (rows * columns);\n    mse = (1\/3)*(mseR + mseG + mseB);\n    psnr = 10 * log10( 255^2 \/ mse);\n    %----------------------------------------------------------------------\n    [rows2 columns2 ~] = size(SinRuido);\n    mseRImage2 = (double(SinRuido(:,:,1)) - double(ConRuido(:,:,1))) .^ 2;\n    mseGImage2 = (double(SinRuido(:,:,2)) - double(ConRuido(:,:,2))) .^ 2;\n    mseBImage2 = (double(SinRuido(:,:,3)) - double(ConRuido(:,:,3))) .^ 2;\n    mseR2 = sum(sum(mseRImage2)) \/ (rows2 * columns2);\n    mseG2 = sum(sum(mseGImage2)) \/ (rows2 * columns2);\n    mseB2 = sum(sum(mseBImage2)) \/ (rows2 * columns2);\n    mse2 = (1\/3)*(mseR2 + mseG2 + mseB2);\n    psnr2 = 10 * log10( 255^2 \/ mse2);\n    %Show results\n    figure('name','Results of noise removal'); \n    set(gcf, 'Position', get(0,'Screensize'));\n    str=''; str2='';\n    str = sprintf('Wavelet = %s\\n%s \\nPSNR = %.2fdB || MSE = %.2f',strtrim(tipowave),strtrim(threshold),psnr,mse);\n    str2 = sprintf('PSNR = %.2fdB || MSE = %.2f',psnr2,mse2);\n    subplot(1,3,1);imshow(SinRuido,smap); title('Original Signal'); set(gca,'xtick',[]);set(gca,'ytick',[]);\n    subplot(1,3,2);imshow(ConRuido,cmap); title('Noisy Signal'); set(gca,'xtick',[]);set(gca,'ytick',[]); xlabel(str2);\n    subplot(1,3,3);imshow(imagen_final,fmap) ; title('Denoised Signal'); set(gca,'xtick',[]);set(gca,'ytick',[]); xlabel(str);\n    clear tipowave, clear snr, clear psnr, clear threshold, clear str;\nelse\n  % File does not exist.\n  warningMessage = sprintf('No existe la imagen con ruido:\\n%s', sv);\n  uiwait(msgbox(warningMessage));\nend\ncatch me\n    h = msgbox({me.identifier me.message}, 'Error denoising signal','Error');\nend\n%--------------------------------------------------------------------------\n%BOT\u00d3N COMPRIMIR IMAGEN\nfunction pushbutton8_compress_Callback(hObject, eventdata, handles)\ntry\n    selection=getGlobalf;\n    pathstr=getGlobald;\n    [pathstr,name,ext] = fileparts(strcat(pathstr, selection));\n    filename = strcat('TS_saved_files\\', name);\n    filename = strcat(filename, '.png');\n    Imagen_Inicial = imread(filename);\n    cmap = colormap(handles.axes1);\n    tipowave='';\n    level='';\n    nivel='';\n    tipowaveid = get(handles.popupmenu_wavelet,'String');\n    tipowave = tipowaveid{get(handles.popupmenu_wavelet,'Value')};\n    levelid = get(handles.popupmenu_wavlevel,'String');\n    level = levelid{get(handles.popupmenu_wavlevel,'Value')};\n    switch get(handles.popupmenu_wavelet,'Value') \n      case 2 \n          tipowave=strcat(tipowave,level);\n      case 3 \n          tipowave=strcat(tipowave,level);\n      case 4 \n          tipowave=strcat(tipowave,level);\n      case 5 \n          tipowave=strcat(tipowave,level);\n      case 6 \n          tipowave=strcat(tipowave,level);\n      case 9 \n          tipowave=strcat(tipowave,level);\n      case 12 \n          tipowave=strcat(tipowave,level);\n      case 13 \n          tipowave=strcat(tipowave,level);\n      case 14 \n          tipowave=strcat(tipowave,level);\n      case 15 \n          tipowave=strcat(tipowave,level);\n      otherwise\n    end \n%--------------------------------------------------------------------------\n% Compresi\u00f3n usando WDENCMP.\n%http:\/\/read.pudn.com\/downloads103\/sourcecode\/book\/422976\/wavelet\/wavelet\/wdencmp.m__.htm\n%http:\/\/web.mit.edu\/1.130\/WebDocs\/1.130\/Software\/Examples\/example4.m\n%http:\/\/es.mathworks.com\/help\/wavelet\/examples\/data-compression-using-2d-wavelet-analysis.html\n%--------------------------------------------------------------------------\n    n = round(get(handles.slider_level,'Value'));      % Decomposition Level\n    thrsorhid = get(handles.popupmenu_thrsorh,'String');\n    thrsorh = thrsorhid{get(handles.popupmenu_thrsorh,'Value')};\n    switch get(handles.popupmenu_thrsorh,'Value') \n      case 1\n          sorh = 's';\n          threshold = 'Thresholding type = Soft ';\n      case 2 \n          sorh = 'h';\n          threshold = 'Thresholding type = Hard ';\n      otherwise\n    end \n    thrtid = get(handles.popupmenu_thrsorh,'String');\n    thrt = thrtid{get(handles.popupmenu_thrsorh,'Value')};\n    switch get(handles.popupmenu_thr,'Value') \n      case 1\n        opt = 'lvd';\n        thr_h = [17 18];    % Horizontal thresholds.\n        thr_d = [19 20];    % Diagonal thresholds.\n        thr_v = [21 22];    % Vertical thresholds. \n        thr = [thr_h ; thr_d ; thr_v];\n        redChannel = Imagen_Inicial(:, :, 1);\n        greenChannel = Imagen_Inicial(:, :, 2);\n        blueChannel = Imagen_Inicial(:, :, 3);\n        %Al utilizar thr como matrix n=2, de lo contrario dar\u00e1 error.\n        [xdr,cxd2r,lxd2r,perf0r,perfl2r] = wdencmp(opt,redChannel,tipowave,2,thr,sorh);\n        [xdg,cxd2g,lxd2g,perf0g,perfl2g] = wdencmp(opt,greenChannel,tipowave,2,thr,sorh);\n        [xdb,cxd2b,lxd2b,perf0b,perfl2b] = wdencmp(opt,blueChannel,tipowave,2,thr,sorh);\n        xd = cat(3, xdr, xdg, xdb);\n        perf0 = (1\/3)*(perf0r+perf0g+perf0b);\n        perfl2 = (1\/3)*(perfl2r+perfl2g+perfl2b);\n        xd=uint8(xd);\n        threshold=strcat(threshold,' and Level-dependant.');\n      case 2 \n        opt = 'gbl';\n        [c s] = wavedec2(Imagen_Inicial,n,char(tipowave));\n        thr=20;\n        [xd,cxd,lxd,perf0,perfl2] = wdencmp(opt,c,s,tipowave,n,thr,sorh,1);\n        xd=uint8(xd);\n        threshold=strcat(threshold,' and Global.');\n      otherwise\n    end \n    %----------------------------------------------------------------------\n    axes(handles.axes1);\n    set(gca,'xtick',[]);\n    set(gca,'ytick',[]);\n    [pathstr,name,ext] = fileparts(filename);\n    sv = strcat('TS_saved_files\\', name);\n    sv = strcat(sv,'_');\n    sv = strcat(sv,tipowave);\n    sv = strcat(sv,'_Level');\n    sv = strcat(sv,num2str(n));\n    sv = strcat(sv,'_thr_');\n    sv = strcat(sv,sorh);\n    sv = strcat(sv,'_');\n    sv = strcat(sv,opt);\n    sv = strcat(sv,'_compressed.png');\n    sv = regexprep(sv,{'\\.','png'},{'','.png'})\n    imwrite(xd,cmap,sv);\n    msg = strcat('Signal -',{' '}, selection);\n    set(handles.edit_info, 'String', msg); \n    %Show results\n    figure('name','Results of image compression'); \n    set(gcf, 'Position', get(0,'Screensize'));\n    Imagen_final = imread(sv);\n    cla;\n    subplot(2,1,1);image(Imagen_Inicial,'CDataMapping','scaled'); title('Original Signal'); set(gca,'xtick',[]);set(gca,'ytick',[]);\n    subplot(2,1,2);image(Imagen_final,'CDataMapping','scaled'); title('Compressed Signal'); set(gca,'xtick',[]);set(gca,'ytick',[]);\n    xlabel(sprintf('Wavelet = %s || Compression level = %d \\n %s \\nCompression score = %2.1f%% || Null coefficients = %2.1f%%',tipowave,n,threshold,perfl2,perf0))\ncatch me\n     h = msgbox({me.identifier me.message}, 'Error in compress button','error');\nend\nfunction edit_info_Callback(hObject, eventdata, handles)\nfunction popupmenu_wavelet_Callback(hObject, eventdata, handles)\ntry\n    switch get(handles.popupmenu_wavelet,'Value')   \n  case 1\n      set(handles.popupmenu_wavlevel, 'Enable', 'off');\n  case 2\n      set(handles.popupmenu_wavlevel, 'Enable', 'on');\n      set(handles.popupmenu_wavlevel,'String',{'1','2','3','4','5','6','7','8','9','10'});\n  case 3\n      set(handles.popupmenu_wavlevel, 'Enable', 'on');\n      set(handles.popupmenu_wavlevel,'String',{'2','3','4','5','6','7','8'});\n  case 4\n      set(handles.popupmenu_wavlevel, 'Enable', 'on');\n      set(handles.popupmenu_wavlevel,'String',{'1','2','3','4','5'});\n  case 5\n      set(handles.popupmenu_wavlevel, 'Enable', 'on');\n      set(handles.popupmenu_wavlevel,'String',{'1.1','1.3','1.5','2.2','2.4','2.6','2.8','3.1','3.3','3.5'});\n  case 6\n      set(handles.popupmenu_wavlevel, 'Enable', 'on');\n      set(handles.popupmenu_wavlevel,'String',{'1.1','1.3','1.5','2.2','2.4','2.6','2.8','3.1','3.3','3.5'});\n%   case 7\n%       set(handles.popupmenu_wavlevel, 'Enable', 'off');\n%   case 8\n%       set(handles.popupmenu_wavlevel, 'Enable', 'off');\n%   case 9\n%       set(handles.popupmenu_wavlevel, 'Enable', 'on');\n%       set(handles.popupmenu_wavlevel,'String',{'1','2','3','4','5','6','7','8'});\n%   case 10\n%       set(handles.popupmenu_wavlevel, 'Enable', 'off');\n%   case 11\n%       set(handles.popupmenu_wavlevel, 'Enable', 'off');\n%   case 12\n%       set(handles.popupmenu_wavlevel, 'Enable', 'on');\n%       set(handles.popupmenu_wavlevel,'String',{'1','2','3','4','5'});\n%   case 13\n%       set(handles.popupmenu_wavlevel, 'Enable', 'on');\n%       set(handles.popupmenu_wavlevel,'String',{'1-1.5','1-1','1-0.5'});\n%   case 14\n%       set(handles.popupmenu_wavlevel, 'Enable', 'on');\n%       set(handles.popupmenu_wavlevel,'String',{'1-1-1.5','1-1-1','1-1-0.5'});\n%   case 15\n%       set(handles.popupmenu_wavlevel, 'Enable', 'on');\n%       set(handles.popupmenu_wavlevel,'String',{'1-1.5','1-1','1-0.5'});\n  otherwise\nend \n   catch me\n    h = msgbox(me.message, 'Error','error');\nend\nfunction edit7_Callback(hObject, eventdata, handles)\nfunction edit_level_Callback(hObject, eventdata, handles)\nfunction popupmenu_wavlevel_Callback(hObject, eventdata, handles)\nfunction similwave_Callback(hObject, eventdata, handles)\n% hObject    handle to similwave (see GCBO)\n% eventdata  reserved - to be defined in a future version of MATLAB\n% handles    structure with handles and user data (see GUIDATA)\n%http:\/\/fudaqs2.ciemat.es\/TJ2WEB\/SimilWave.html\nurl = 'http:\/\/fudaqs2.ciemat.es\/TJ2WEB\/SimilWave.html';\nweb(url,'-browser')\nfunction ciematrepo_Callback(hObject, eventdata, handles)\n% hObject    handle to ciematrepo (see GCBO)\n% eventdata  reserved - to be defined in a future version of MATLAB\n% handles    structure with handles and user data (see GUIDATA)\n%http:\/\/fudaqs2.ciemat.es\/TJ2WEB\/\nurl = 'http:\/\/fudaqs2.ciemat.es\/TJ2WEB\/';\nweb(url,'-browser')\nfunction usingwavtoolbox_Callback(hObject, eventdata, handles)\n% hObject    handle to usingwavtoolbox (see GCBO)\n% eventdata  reserved - to be defined in a future version of MATLAB\n% handles    structure with handles and user data (see GUIDATA)\n%http:\/\/nf.nci.org.au\/facilities\/software\/Matlab\/toolbox\/wavelet\/ch01_i24.html\nurl = 'http:\/\/nf.nci.org.au\/facilities\/software\/Matlab\/toolbox\/wavelet\/ch01_i24.html';\nweb(url,'-browser')\nfunction mwdocu_Callback(hObject, eventdata, handles)\n% hObject    handle to mwdocu (see GCBO)\n% eventdata  reserved - to be defined in a future version of MATLAB\n% handles    structure with handles and user data (see GUIDATA)\n%http:\/\/es.mathworks.com\/help\/matlab\/index.html\nurl = 'http:\/\/es.mathworks.com\/help\/matlab\/index.html';\nweb(url,'-browser')\nfunction slider_level_Callback(hObject, eventdata, handles)\n% hObject    handle to slider_level (see GCBO)\n% eventdata  reserved - to be defined in a future version of MATLAB\n% handles    structure with handles and user data (see GUIDATA)\n\na = get(handles.slider_level,'Value');\nset(handles.edit_level,'string',strcat('Level',{' '},num2str(round(a))));\nfunction edit_typethr_Callback(hObject, eventdata, handles)\nfunction popupmenu_thr_Callback(hObject, eventdata, handles)\nfunction popupmenu_thrsorh_Callback(hObject, eventdata, handles)\nfunction popupmenu_noisetype_Callback(hObject, eventdata, handles)\nfunction edit11_Callback(hObject, eventdata, handles)\nfunction edit12_Callback(hObject, eventdata, handles)\nfunction popupmenu_noiseval_Callback(hObject, eventdata, handles)\n<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Archivos_del_proyecto\"><\/span>Archivos del proyecto<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li><a href=\"https:\/\/garikoitz.info\/blog\/descargas\/TSSP.zip\">Archivos fuente<\/a> (Sin compilar. Necesario Matlab &gt;2016)<\/li>\n<li><a href=\"https:\/\/garikoitz.info\/blog\/descargas\/TJ-II.zip\">Se\u00f1ales TJ-II<\/a><\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Bibliografia\"><\/span>Bibliograf\u00eda<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p style=\"padding-left: 30px;\">[1] C. Srisailam, P. Sharma, S. Suhane. Color Image Denoising Using Wavelet soft Thresholding. &nbsp;&nbsp;&nbsp;International Journal of Emerging Technology and Advanced Engineering. IJETAE Journal. [en l\u00ednea]. Jabalpur 2014. Disponible en: <a href=\"https:\/\/goo.gl\/AtT98e\">https:\/\/goo.gl\/AtT98e<\/a><\/p>\n<p style=\"padding-left: 30px;\">[2] Dimitris G. Manilakis, Vinay K. Ingle. <em>Applied Digital Signal Processing<\/em>. London, UK: Cambridge University Press, 2013. ISBN: 978-0-521-11002-0<\/p>\n<p style=\"padding-left: 30px;\">[3] G. P. Guerrero, H. S. Escobar. <em>Compresi\u00f3n de im\u00e1genes usando wavelets<\/em>. Trabajo de investigaci\u00f3n. [en l\u00ednea]. Medell\u00edn, 2007. Disponible en: <a href=\"https:\/\/goo.gl\/en5vND\">https:\/\/goo.gl\/en5vND<\/a><\/p>\n<p style=\"padding-left: 30px;\">[4] L. Maliki, S. Dormido-Canto, J. Vega. Clasificador de Im\u00e1genes del Diagn\u00f3stico Thomson Scattering del TJ II Basado en Template Matching. [en l\u00ednea]. Espa\u00f1a, 2008. Disponible en: <a href=\"https:\/\/goo.gl\/8Pq97n\">https:\/\/goo.gl\/8Pq97n<\/a><\/p>\n<p style=\"padding-left: 30px;\">[5] M. Misiti, Y. Misiti, G. Oppenheim, JM. Poggi. Wavelet Toolbox user\u2019s guide. R2016a. [en l\u00ednea]. Natick (MA), EE.UU, 2016. Disponible en: <a href=\"https:\/\/goo.gl\/T82Efm\">https:\/\/goo.gl\/T82Efm<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Objetivo Aplicar an&aacute;lisis wavelets de eliminaci&oacute;n de ruido y de compresi&oacute;n de la informaci&oacute;n a se&ntilde;ales provenientes de experimentos de fusi&oacute;n nuclear por confinamiento magn&eacute;tico. Introducci&oacute;n Disponemos de im&aacute;genes en bruto almacenadas en forma de matriz. Cada archivo en bruto tiene un tama&ntilde;o de 5631 KB y se corresponde con una imagen de 576&times;385 pixels. Los archivos son im&aacute;genes de diagn&oacute;stico Thomson Scattering TJ-II y se dividen en cinco grupos. Fondo c&aacute;mara CCD (BKGND). Plasma en corte ECRH (COFF). Plasma&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/eliminacion-de-ruido-y-compresion-de-imagenes-mediante-wavelets\/\"> Leer m\u00e1s<span class=\"screen-reader-text\">  Leer m\u00e1s<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":315,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","wpupg_custom_link":[],"wpupg_custom_link_behaviour":[],"wpupg_custom_link_nofollow":[],"wpupg_custom_image":[],"wpupg_custom_image_id":[],"footnotes":""},"categories":[27],"tags":[31,23,32,29,30,28],"class_list":["post-309","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-matlab","tag-compresion","tag-matlab","tag-ruido","tag-thomson-scattering","tag-tj-ii","tag-wavelet"],"_links":{"self":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts\/309","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/comments?post=309"}],"version-history":[{"count":10,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts\/309\/revisions"}],"predecessor-version":[{"id":1266,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts\/309\/revisions\/1266"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/media\/315"}],"wp:attachment":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/media?parent=309"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/categories?post=309"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/tags?post=309"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}