Using OME data formats in a C# imaging app
Posted: Sun Nov 07, 2010 3:49 pm
Hi guys,
Over the last 2 years I have been busy developing a confocal imaging application in C#. This has worked out pretty well until now, it supports a wide array of hardware through a unified interface etc...
The only thing that is a bit primitive is the data model (or the lack thereof). Right now I just store a bunch of doubles that compose my image as a binary file that can be read cross platform... No metadata is stored and it is left to the operator to record all experimental parameters by hand. Since we are now moving from normal confocal to STED and a bunch of other experiment types which require multi channel support I need something better.
Because I had no clue on how to create a "proper" data format that would be future proof and extensible I went looking online and eventually stumbled upon OME.
I would very much like to implement the OME data model now but I am a bit unsure on how to go about things.:
I started by using the Microsoft SDK "xsd.exe" tool together with the ome/OMERO/ROI/SA/SPW/BinaryFile schemas to generate a class according to these schemas. I guess I could now use this class in an actual program to fill it with data and to read/write it to disk.
A few things that have me worried though are how to exactly work with this approach while measuring. As I understand the image data is converted to Base64 encoding and compressed in the OME xml but won't this incur a performance hit in my application (e.g. when recording multiple channels at once etc...)
Basically it is very difficult to write software that handles data efficiently and fast enough and I don't really know how to do it properly. It's really the weak spot in my application (the lower level HW interaction code is actually quite fancy, as is the UI, the thing can render huge arrays of data very fast but all downstream data handling sucks...)
Does anybody have experience with these topics? Are there any good open source image acquisition tools that I could use to get inspired (anything written in Java, C++ will do) and that could be used to come to grips with some good concepts?
I think I should ideally move to a situation where I have an app that can acquire data directly to the OME format and then the lab could use all the other OMERO tools for storage/data processing etc...
Any advice would be welcome...
Best regards,
Kris
Over the last 2 years I have been busy developing a confocal imaging application in C#. This has worked out pretty well until now, it supports a wide array of hardware through a unified interface etc...
The only thing that is a bit primitive is the data model (or the lack thereof). Right now I just store a bunch of doubles that compose my image as a binary file that can be read cross platform... No metadata is stored and it is left to the operator to record all experimental parameters by hand. Since we are now moving from normal confocal to STED and a bunch of other experiment types which require multi channel support I need something better.
Because I had no clue on how to create a "proper" data format that would be future proof and extensible I went looking online and eventually stumbled upon OME.
I would very much like to implement the OME data model now but I am a bit unsure on how to go about things.:
I started by using the Microsoft SDK "xsd.exe" tool together with the ome/OMERO/ROI/SA/SPW/BinaryFile schemas to generate a class according to these schemas. I guess I could now use this class in an actual program to fill it with data and to read/write it to disk.
A few things that have me worried though are how to exactly work with this approach while measuring. As I understand the image data is converted to Base64 encoding and compressed in the OME xml but won't this incur a performance hit in my application (e.g. when recording multiple channels at once etc...)
Basically it is very difficult to write software that handles data efficiently and fast enough and I don't really know how to do it properly. It's really the weak spot in my application (the lower level HW interaction code is actually quite fancy, as is the UI, the thing can render huge arrays of data very fast but all downstream data handling sucks...)
Does anybody have experience with these topics? Are there any good open source image acquisition tools that I could use to get inspired (anything written in Java, C++ will do) and that could be used to come to grips with some good concepts?
I think I should ideally move to a situation where I have an app that can acquire data directly to the OME format and then the lab could use all the other OMERO tools for storage/data processing etc...
Any advice would be welcome...
Best regards,
Kris