[Eqalign-devel] =?iso-8859-1?q?Subsistema_de_c=E1maras?=
Brought to you by:
antoniofga,
isoplut
From: Antonio F. <ant...@ya...> - 2007-12-01 22:22:14
|
Acabo de subir el proyecto CamCap. Si lo abren ver=E1n que s=F3lo tiene = un formulario que controla una instancia de la clase Camera que est=E1 = en otro proyecto compilado como una librer=EDa. Ah=ED es donde est=E1 = todo el meollo de c=E1maras. El proyecto EQCam exporta dos clases: Camera: es el punto de entrada a todos los drivers de c=E1mara en s=ED. Imaging: esta clase da soporte al tipo de imagen que trabaja Camera: = FloatImage. FloatImage representa una imagen (monocroma) en un array = floats normalizado (valores entre 0.0 y 1.0). Contiene los m=E9todos = necesarios para importar desde un bitmap o desde otro objeto de tipo = FloatImage, exportar a Bitmap, operaciones b=E1sicas sobre el = histograma, operaciones aritm=E9ticas sobre de im=E1genes con otras = im=E1genes o con valores num=E9ricos, clonaci=F3n, etc. (lo de etc es = m=E1s bien porque podemos meter ah=ED lo que queramos).=20 Hay un proceso de imagen definido: GaussianBlur, tengo algunos m=E1s = pero este es el =FAnico estrictamente necesario. Bueno, igual es = necesario meter los ajustes de histograma m=E1s complejos (mediante = curvas o ajuste de medios tonos), pero ya veremos. Bien, lo importante es que todos los drivers de la clase Camera y la = propia clase camera devuelven FloatImage con lo que pasamos a = precisi=F3n de 32 bits, m=E1s que para la captura, para otros procesos = como apilados y promedios es bastante interesante contar con m=E1s = precisi=F3n que la propia c=E1mara. Vale. Sobre las c=E1maras. He copiado casi literalmente la = especificaci=F3n ascom, con s=F3lo algunos cambios, hasta el conrtol del = cooling y "t=F3". En el interfaz CameraInterface est=E1 detallada toda = la especificaci=F3n. Miren este archivo antes de nada. S=F3lo he implementado SimCamera y WDM para comprobar que el modelo es = v=E1lido. Si nos ponemos de acuerdo habr=EDa que recodificar todos los = drivers de c=E1mara. Una de los puntos a favor de este modelo es que los drivers de c=E1mara = no hacen "procesos de negocio", simplemente atienden a las peticiones de = imagen y act=FAan sobre los par=E1metros b=E1sicos de la c=E1mara que = controlan: binning, subframe, temperatura del peltier,... Los "procesos de negocio" (exposici=F3n en modo loop, proceso de = obtenci=F3n de darks y resta del dark, histogramas, etc...) estar=EDan = en la clase Camera como capa superior y punto de acceso a las c=E1maras = desde "fuera". De todas maneras, a partir de la clase Camera se tiene acceso directo al = driver al que se est=E1 conectado, por si se quisiera realizar alguna = alguna acci=F3n espec=EDfica. A ver: Adem=E1s de implementar el interfaz CameraInterface, los drivers de = c=E1mara pueden implementar otras funcionalidades espec=EDficas de cada = c=E1mara. Por ejemplo: -el driver de la c=E1mara de simulaci=F3n necesita conocer los valores = de latitud/longitud y las coordenadas donde que apunta el telescopio. -el driver WDM necesita tener acceso a los par=E1metros de larga = exposici=F3n (si es un SC1, etc) -el driver WDM puede presentar - aparte del di=E1logo de configuraci=F3n = que todas las c=E1maras muestran en el m=E9todo com=FAn SetupDialog- = otro di=E1logo de configuraci=F3n de formato. Algunos se implementan en la propia clase Camera, pero tener acceso a = los que no, se hace a travez del propio driver espec=EDfico a partir de = la propiedad:=20 public CameraInterface CamDriver Por ejemplo, para mostrar el di=E1logo de formato, espec=EDfico de las = WDM: if (cam.CameraAccessType =3D=3D eCameraAccessType.WDM) ((EQA.Camera.Drivers.WDMCam)cam.CamDriver).FormatDialog(); Otro ventaja que le veo a este modelo es que el subsistema de c=E1mara = queda separado en una librer=EDa, si detectamos cualquier problema, = basta con corregirlo y redistribuir esta librer=EDa. Tal como est=E1 = ahora, el programa consumidor tiene que establecer el tipo de c=E1mara = (Sim, WDM, Atik...), pero es f=E1cil aislar eso tambi=E9n, con lo que si = se implementan nuevas c=E1maras no ser=EDa necesario siquiera compilar = el proyecto EQAlign. Adem=E1s el acceso a c=E1maras em una librer=EDa = separada se puede utilizar en un proyecto totalmente diferente, como es = el propio CamCam. Bien, he tratado de hacer robusto el sistema de acceso a las im=E1genes = con sem=E1foros y dem=E1s. Tambi=E9n he tratado de hacer "buen" (jajaja) = uso de los hilos, pero no he estado ni tres d=EDas con esto as=ED que si = estamos de acuerdo que este es el mejor modelo posible, todav=EDa hay = mucho en lo que trabajar.=20 Bueno, en cuanto a la obtenci=F3n de im=E1genes: se puede usar un = cron=F3metro y trabajar en cada click, preguntando si la imagene st=E1 = disponible para obtenerla etc, o se puede capturar un evento que dispara = la calse C=E1mara cuando tiene la imagen disponible. Dependiendo de = qu=E9 cosa un m=E9todo ser=E1 mejor que otro.=20 En fin, desc=E1rgenlo, pru=E9benlo, m=EDrenlo, busquelen las cosquillas = y lo discutimos. Un saludo! |