Más bien, si puedes, trata de tener cierta holgura alrededor del punto que buscas.
¿Por qué es mejor tener holgura? ¿No sería mejor intentar aproximarse mucho con estas tres estimaciones? Así, la interpolación sería también más exacta.
Para conseguir evitar la extrapolación, asegúrate de calcular los tres puntos de la tabla a distancias suficientes entre sí.
Sí... pero eso me obligaría a elegir un criterio arbitrario para elegir esos puntos, y estoy seguro de que los usuarios tarde o temprano encontrarán una combinación de imagen+objetivos que se salga de los valores elegidos. No quiero restringir al usuario a la hora de hacer lo que quiera, y si lo que quiere es quemar la imagen con este programa, o por el contrario dejarla totalmente negra, debería ser capaz de hacerlo.
Como es evidente que esto se va a convertir en un módulo (jejeje), no descartes emplear un algoritmo de interpolación más refinado (= diferente de interpolación polinómica). Los splines cúbicos me vienen a la cabeza, así de repente, no sé por qué será... :roll: :wink:
Jeje, a la yugular eh? Y ya van dos! (la otra es "Y es que me temo que estamos pidiendo demasiado a un lenguage interpretado... " jejeje, que te creías que no la iba a pillar xD). Con respecto a los splines, estoy totalmente a cero en ese tema. Sé que es una cosa muy chula que existe y que es capaz de hacer pasar una curva por todos los puntos que queramos, pero nada más.
---
Estas últimas horas he estado intentando encontrar un mecanismo para que los 3 valores a partir de los cuales calculamos la función cuadrática (o spline o bananas :^P) no sean totalmente aleatorios, elegidos en un momento del tiempo y planchados en el script como números mágicos. Ugh...
Le he hecho muy pocas pruebas (apenas con dos imágenes) pero me parece que como propuesta preliminar, merece la pena ponerla por aquí. Aviso, esto es artesanía pura, que sólo estudié hasta los 20 y repitiendo cursos... (*)
Partimos de dos valores: la mediana actual de la imagen (MA), y la mediana que queremos como objetivo (MO). Haciéndole un par de cosquillitas a estos números, obtenemos una primera aproximación de MTF bastante buena a mi juicio:
Pepito = 1 + MO/MA
MTF = 1 / Pepito
Aplicando con este valor obtenemos una imagen cuya mediana, dividida entre MA, nos da un valor parecido a Pepito. Usaremos la diferencia entre este valor y el Pepito real, para probar un nuevo valor de MTF. Repetimos una segunda vez y ya tenemos 3 MTFs.
He aquí los números reales de una de las pruebas. Tenemos una imagen con mediana 0.0025, y pongamos que queremos 0.0800:
Pepito = 1 + 0.0800/0.0025 = 1 + 32.0000 = 33.0000
MTF = 1 / 33.0000 = 0.0303
Aplicando un histogramita (una sola iteración y sin máscara, que las pruebas van a mano) obtenemos una imagen con mediana 0.0956. ¡Nada lejos del 0.0800 deseado! A ver cómo ha cambiado nuestro Pepito:
Nuevo Pepito = 0.0956/0.0025 = 38.2400
Como nos hemos pasado con la mediana, Pepito también es mayor que el original. La diferencia entre ellos es 5.2400. Para alterar el valor de MTF, he decidido sumarle una milésima de esta diferencia:
Nueva MTF = MTF previa + (38.2400 - 33.0000) / 1000 = 0.0355
Aplicando, obtenemos una imagen con mediana 0.0771. Más cerca todavía y, lo que es más importante, menor que la buscada. Ya tenemos un valor mayor y uno menor, lo que significa que la MTF real ya la tenemos cazada.
Nuevo Pepito = 0.0771/0.0025 = 30.8400
Nueva MTF = MTF previa + (30.8400 - 33.0000) / 1000 = 0.0334
Y aquí tenemos 3 valores para MTF. ¿Alguien ha aguantando hasta aquí? Os dije que era artesanía...
Al probar en otra imagen, parte de esta montaña de inventos se vino abajo
. Básicamente no conseguí una mediana a ambos lados del objetivo, lo que significa que el valor real de MTF estaba más allá. Cambiando el cociente 1000 por un 500 (es decir, alterando MTF en dos milésimas en lugar de una) casi lo pillo, pero aún se me quedó fuera. Poniéndole 200 (5 milésimas) supongo que me pasaré 3 pueblos, pero al menos creo que puedo estar seguro de tenerlo cazado. Y al fin y al cabo, serán 3 milésimas de pueblo lo que me pase.
Hala, a ver a quién se le han quedado los :shock:j:shock:s más grandes...
(*) Realmente no he estudiado en toda mi vida, pero eso :^P.