I have a hyperion satellite data and I have tried various classification algorithms on it. Object oriented classification has produced the best results in reputed researches.
If you're not set on doing the entire thing in MATLAB there is a paper we have just published which describes a Python based system for object oriented classification which may be suitable:
Clewley, D.; Bunting, P.; Shepherd, J.; Gillingham, S.; Flood, N.; Dymond, J.; Lucas, R.; Armston, J.; Moghaddam, M. A Python-Based Open Source System for Geographic Object-Based Image Analysis (GEOBIA) Utilizing Raster Attribute Tables. Remote Sensing 2014, 6, 6111-6135.
For segmentation, I'd recommend using only a subset of bands. You could also use OTB (http://www.orfeo-toolbox.org/otb/) to perform the segmentation step. Once you have attributed objets you could export as a text file and import this into MATLAB for the classification or read in as a HDF5 file.
This blog post has some more information on how to install the software (unfortunately you need to run under Linux or OS X at the moment) and some example code:
I am not an expert on object oriented classification, but however, I would approach the problem like this:
1). Segment objects - This could be from simple clusters that were derived using ISODATA or k-means (if implemented in MATLAB) or from simple egde detection.
2). Create/construct the attributes of the isolated cluster - this means creating a shape file of the edge, assigning attributes like area, type (in the case of LULC - land, vegetation, shrubs, parks, water-bodies etc. In case of oceanic features, geomorphic types of coral reefs ), centroid location, spectral properties/stats and all the object properties that should be expected.
3). Create a hierarchy of the objects - for example the main image is the root and inside which some object 1 is a water body inside object 3 (say park), and object 2 and object 4 are together and one is east of the other etc.. You could do this in matlab using hierarchical clustering - hclust(). Note that your hierarchy rules will be based on the object attributes and it should tell us something about the object of interest with respect to the main image.
4) From this create training samples and use any classifier to classify the training data.
5). Classify the remaining part of the image (if some region of interest were chosen in step-1) or another image based on the hierarchy rules you created,
6) Repeat/iterate the process and
7) Merge or combine orphans based on some geometric or spectral criteria.
Having said that, I heard eCognition is better suited for object based segmentation than the traditional pixel based, hence if u could get your hands on eCognition software, you would not have to reinvent the wheel and bother about code optimization. However, if you wish to code in MATLAB, then code the 7 steps outlined above. if you are not a good programmer, then put your code on Github or mathcentral, where people and/or I (whenever I am free) will help you out.
Well thats my 2 cents on your question.. Hope that helps
Gopal you can use several edge detection algorithm with any of the classification, the ISODATA will essentially do statistical clustering and will not take into consideration the shape.
If you're not set on doing the entire thing in MATLAB there is a paper we have just published which describes a Python based system for object oriented classification which may be suitable:
Clewley, D.; Bunting, P.; Shepherd, J.; Gillingham, S.; Flood, N.; Dymond, J.; Lucas, R.; Armston, J.; Moghaddam, M. A Python-Based Open Source System for Geographic Object-Based Image Analysis (GEOBIA) Utilizing Raster Attribute Tables. Remote Sensing 2014, 6, 6111-6135.
For segmentation, I'd recommend using only a subset of bands. You could also use OTB (http://www.orfeo-toolbox.org/otb/) to perform the segmentation step. Once you have attributed objets you could export as a text file and import this into MATLAB for the classification or read in as a HDF5 file.
This blog post has some more information on how to install the software (unfortunately you need to run under Linux or OS X at the moment) and some example code: