Introduction
I speak Chinese and English. I have 12 year experience using Linux as desktop and I have seven-year experience of image processing and analysis in biomedical area, specifically writing customized scripts with Octave/Matlab, ImageJ plugins in Java and macro scripting to process and analyze super-resolution images. Currently, I am a PhD student at New York University studying molecular topology network prediction using graph theory, primarily programming in C++ on Unix/Linux.
Why GSoC? Why Octave?
I have known about GSoC program since 2010 or 2011 from the maintainer/help mailing list. Initially in 2007 for image processing purposes, when I was searching Matlab alternatives for Linux system, I found Octave, so I started to subscribe Octave mailing lists started reading the contributor communication seeing passionate and serious discussion, hoping someday I also have an @octave.org email account. Until one day, I found people discussing topics regarding GSoC, four or five years ago. So I have been having this idea of contributing to the Octave community for a long time.
Contributing to open-source is a great way to improve myself, and has always been my plan to get to know how the work in real life is done. Participating Google Summer Code is going to enable me get an in-depth understanding of Google's spirit and culture. Work and communication with other software engineers and scientific computing scientist in the open-source community in a collaborative way will allow me grow up fast.
It will be an exciting and fruitful experience for me to code through the summer, with the purpose also directly related to my own research. My peer-review publication manuscripts will include much image processing/analysis, which will employ modules related to Octave Image packages and topics about Image IO. Therefore, the GSoC project will directly benefit my research project and this motivate myself highly.
I chose Octave because it is Octave introduced me to open source community; to let me see how a particular open-source community grow and evolve; how Octave gets more and more powerful, over the last eight years.
Contact
E-mail Addresss: daniel27183@gmail.com
IRC Handle: dl11159
Location: New York, New York, USA
Time zone: UTC-5
I usually code around 6.30 to 14.30 (UTC-5), i.e., 1.30 to 9.30 (UTC+0), and could also try to adjust to a different time slot upon discussion. The above information is effective during GSoC.
I can devote 40 hours per week and more if necessary. My PhD graduation will be in 2018.
Coding experience
I took C++ programming course during my undergrad and now I code in C++ on a daily basis for my PhD thesis project. I started using Octave in 2007 for image processing/analysis. Later on I started using it for any general processing/analyzing/computing/plotting purposes. I also used it for my Scientific Computing course in graduate school. I followed online tutorial C++ OpenGL programming, eventually made a single user game. I do not have experience with Qt, only installed it on my computer three years ago to see how it looks.
I worked in a development team during an business competition during undergrad. I was responsible for the database design and implementation.
My current PhD thesis work is my biggest project so far. It's written in C++. I got to learn to get source code organized and its design pattern, even just the documentations plays very important role in maintenance and debugging efficiency.
Other related courses I took include Fundamental Algorithm, C programming, Java programming, Computer Network, Database Management, and Big Data Programming (Hadoop ecosystem).
Progress of Commits and patches: Not yet. I have been playing with imtranslate and imadjust. As we know imtranslate.m in Octave image package implemented the translation using Fourier interpolation for 2D images only, differing from or incompatible with the MatLab version.
I changed my computer lately for some reason, and there was only Matlab 2009 installed on the Mac OS, cannot run imtranslate. Yesterday I found I could access the Matlab 2014 version from the cluster of my university, so I just got a chance to test it this morning.
I was trying to install the image package on Octave 4.0.0, found out the one of the dependency package --- control package has yet to work on Octave 4.0.0. So I may have to use 3.8.2 to test it and start implementing the imtranslate possessing both 2D and 3D processing capability and being compatible with Matlab.
I consider this a very basic exercise to warm me up before delving into my real work on Image IO GNU/Octave GSoC 2015 project.
Experience with Open-Source Software/GNU products
I am an aficionado of any OSS.
I started using Linux twelve years ago. My desktop evolves from Redhat, Fedora, Gentoo, Ubuntu, Archlinux, Mint, until now I have two laptops, one is for normal work on Ubuntu, the other has Archlinux just for fun.
I am familiar with most of the popular utilities/tools on Unix/Linux, including gcc, gdb, make, bash, perl, sed, awk, grep, cut, tr, ed, ldd, vim, ctag, tmux, screen....I have some experience with SDL, OpenCV and OpenGL.
Previously, I played with them just for fun, so I never publicly post anything, until I started thinking I could also be the one to produce some fun stuff.
Feeling fine
I am feeling fine with all (IRC, mailing lists, source management systems, make, gdb, gcc) except I did not know Mediawiki or other wiki software. I have been studying in the list for many years, checking the mailing list everyday is a hobby of mine already. I will contribute more after the GSoC towards obtaining an octave.org domain email. That's my plan.
Prerequisites
- I can work 40 hours per week during GSoC.
- I have access to Mac OS high performance powerstation at my lab.
- I have access to Linux on the university cluster.
- I have access to Windows on my laptop
- I have access to Linux on My laptop, will be used for most of the tasks of Image IO GSoC 2015 project.
- I do not think it would be an issue even though I do not have administrator privileges over the Linux cluster/MacOS. Wouldn't --prefix be enough?
Self-assessment
- Please describe how useful criticism looks from your point of view as committing student.
It is critically important, that's one of the reason I want to join Octave community.
- How autonomous are you when developing? If you answer both subquestions with "Yes, definitely", we are a tad confused. ;-)
I have to say I am very self-motivated. But I need guidance to avoid unnecessary mistakes.
- Do you like to discuss changes intensively and not start coding until you know what you want to do?
Yes, I tend to gather enough information. Sometimes, more than enough, maybe too much.
- Do you like to code a proof of concept to 'see how it turns out', modifying that and taking the risk of having work thrown away if it doesn't match what the project or original proponent had in mind?
Yes. But I think it is not about like or not, it has to be in the workflow, not to mention that I am learning.
Project Description:
Improve Octave's image IO
I chose this project from the wiki <http://wiki.octave.org/Summer_of_Code_Project_Ideas>
My GSoC2015 project is all about to improve or even replace it with a better image IO. A whole new implementation of image IO in C++ will implemented during the summer with extensive testing and code review, aiming to provide a robust image module with quality code.
An enhanced image IO will be implemented in this GNU/Octave GSoC project. Most of the popular scientific image file formats will be adapted. TIFF (Tagged Image File Format)[1] as the de factor standard for scientific images, in many areas including biomedical imaging, astronomy and industry application, will be used as the sample data during the initial implementation.
Beyond TIFF, there are a lot of image formats. To handle this, Octave[2] traditionally uses GraphicsMagic (GM)[3], a library capable of handling many of them via a single C++ interface. However, GM still has its limitations. The most important are:
- Many of the scientific images or processing intermediates have to be encoded in 16 or higher bit of depth, that need to compile GM specifying quantum option "--with-quantum-depth=", priori to compiling Octave, which per se could be an obstacle for general user to apply to their research for production/research publication purposes. With thus compilation, the high bit depth memory allocation is a waste for other smaller bit-depth image processing task. Building GM with high quantum means that images of smaller bit-depth will take a lot more memory when reading, but building it too low will make it impossible to read images of higher bit-depth. It also means that the image needs to always be rescaled to the correct range.
- GM supports unsigned integers only thus incorrectly reading files such as TIFF with floating point data.
- GM hides away details of the image such as whether the image file is indexed. This makes it hard to access the real data stored on file.
This project would implement better image IO for scientific file formats while leaving GM handle the others. Since TIFF is the de facto standard for scientific images, this should be done first. Among the targets for the project given in a timeframe manner are described below.
Detail Project Timeline
- NOTE: most of this part is based on or copied from the list from here: http://wiki.octave.org/Summer_of_Code_Project_Ideas. I am still updating it.
Community bonding period
- Getting familiar with the image package and octave packaging system and related octave/C++ source codes.
- Communicate with mentors and the community members when necessary
GSoC Working period
1st week (05/25 - 05/30)
Determine the image format and make priority queue of the tasks.
Gather image sample format from various sources with diverse specifications. Fully communicating with mentors to figure out the feasibilities of different possibilities about listings of image formats in prority order and candidate C++ libraries to reference from. Study them briefly and start studying the target one(s).
2nd week (06/01/- 06/07)
Based on what I learn and continue learning to implement the Tiff class which is a wrap around libtiff, using classdef. To avoid creating too many private __oct functions, this project could also create a C++ interface to declare new Octave classdef functions.
3rd week (06/08-06/14)
Improve imread, imwrite, and imfinfo for tiff files using the newly created Tiff class.
4th week (06/15- 06/21)
Port the bioformats into Octave and prepare a package for it.
5th week (06/22 - 07/06)
Investigate other image IO libraries.
Mid-Term Evaluation
Load images of differnt formats and depths from various sources for testing.
7th week (07/06 - 07/12)
Clean up and finish the dicom package to include into Octave core.
8th week (07/13 - 07/19)
Prepare a matlab compatible implementation of the FITS package for inclusion in Octave core.
9-10th week (07/20 - 08/02)
Flexible. Depending on progress and performance, could add test modules for all previous work, fix bugs, or make significant changes and utilize new ideas if necessary.
11th and 12th week(08/03 -08/16)
Review and documentation, write report to summarize and outline any prospective work for further development in GNU/Octave community.
Other Commitments
Seeing PT for recovery from a recent leg bone fracture, cannot do anything except GSoC.