Steve on Image Processing

January 15th, 2007

A Year of Blogging

I started this blog on image processing and MATLAB about a year ago. Shortly afterward, another blogger discovered it and told the world that a blog solely about MATLAB and image processing was insane!

Maybe so. But I've really enjoyed it, and many of you kind readers have encouraged me enough to keep it going.

In the past year this blog has seen 81 posts and 281 comments (including 109 responses from me). I browsed the list this morning to get a sense of the different topics and types of posts. Here are a few themes and samples:

The biggest challenge for me has been how to politely say no when people ask me to write code and send it to them for their school projects.

Heading into my second year of image processing blogging, I have a few questions for you:

  • What topics would you like to see?
  • Would you like me to categorize my blog posts? Loren uses categories in her Art of MATLAB blog.
  • Do you have any other suggestions for this or any other MATLAB Central blog?

Enter your comments here. Thanks for reading and for letting me know what you think.

50 Responses to “A Year of Blogging”

  1. Patrick Tardif replied on :

    I would like to see a post for how to compute the distance between 2 objects or lines from a picture, in pixel and convert it in physical distance as inch or meter (from dpi resolution data inside the file image header).

  2. feelfree replied on :

    Hi Steve, I would like to see more subjects on (1)Under the hood: Image processing algorithms and implementations
    ;and (2)Image processing examples. Thank you for your work as well.

  3. Rob replied on :

    Steve,

    Congratulations on a year of blogging! This is a recent find for me, but looking back over your posts is like taking a short-course in image processing. Very helpful.

    To answer your survey questions:
    1. Topics: I like that you post on what seems to be an inspiring problem at the time. Perhaps focus on an even mix of the most common and most interesting / peculiar applications.
    2. Categories: Since your posts are titled and searchable, not so important to me.
    3. Suggestions: Include in future posts a “what they were thinking” section. There are times when I understand the operation being performed, but not necessarily why the approach taken by the programmers was thought to be the best one.

    Regards,
    Rob

  4. Capt. Jean-Luc Pikachu replied on :

    Have you done any vision stuff? Basically, anything that comes after you’ve captured & processed the image, like structure from X, tracking, etc. If so, that’d be a good topic to cover. IMO, the low level stuff is cake thanks to the IPT, but what comes after isn’t always…

    Alternatively, have you read any good papers this year that you didn’t blog about?

    And speaking of homework, have you seen anything that might make good practice problems for chapters 9-12 of DIPUM? If so, please share!

    It looks like you have the categories already thought up for your posts, but it can’t hurt to make them official.

    Here’s to another year of good blogging! ^^v

  5. Duane Hanselman replied on :

    Steve:
    Why is “The biggest challenge for me has been how to politely say no when people ask me to write code and send it to them for their school projects” ?

    Are you saying that your fundamental urge is to not be polite and you must fight that urge, but yet feel compelled to respond?

    After mulling this problem over and over on the newsgroup over the years, I have come to the conclusion that there is simply no need to respond in any way. That way politeness is not an issue and the time spent being challenged can be devoted to more productive work. The rapid increase in homework requests have severely diminished the utility of the newsgroup, just as the increase in FEX submissions has diminished the quality of the FEX.

    So much for my rant. Keep up the good work.
    Duane

  6. Steve replied on :

    Patrick and feelfree – Thanks for the suggestions. I put them on my list.

  7. Steve replied on :

    Rob – I’ve been at The MathWorks for 13 years now, which is long enough for quite a few “What was I thinking??” moments. :-) But I’m not likely to guess which ones are bothering you. If there’s something specific you have in mind, please let me know.

  8. Steve replied on :

    Captain – You know, I’m not really much of a computer vision expert. I tend to write about what I know and am personally interested in, and that’s image processing algorithms and associated data structures and software implementations. But I’ll keep the suggestion in mind, and when I see something that looks good, I’ll pass it along. I have no particular suggestions about homework problems for DIPUM. We didn’t really think DIPUM would get much use as a textbook, but it seems we were wrong.

  9. Steve replied on :

    Duane – No, my challenge is how to say no without seeming rude. One difference between this blog and the newsgroup is that blog comments and questions are directed to me personally. That makes simply ignoring them a less desirable option. In the newsgroup, I think your way is best.

  10. MurrayMD replied on :

    Steve,

    Thanks for starting your blog! I’ve just discovered it through the Google homepage add-ins and plan to visit it often. I work in the cone-beam imaging field and see potential for improvement in that field but need a better technical background. I’m sure your blog will be a great source of information. Anyway, it looks like I’ve got a year’s worth of reading to catch up on so all the best!

    Dave Murray
    Grad Student, Medical Physics
    San Antonio, Texas

  11. Steve replied on :

    Dave – Thanks for the kind words.

  12. Rob replied on :

    Steve,

    Care to comment on obsoleting the ‘isrgb’ function? Is there a better way to identify rgb images, or do we just need to copy isrgb.m into our script path before it disappears?

    Would this qualify for a “what were they thinking?” moment I mentioned earlier? Please share.

    -Rob

  13. Aamir Shahzad replied on :

    hi

    i am Aamir Shahzad from Attock city, Pakistan.

    i am working on my final degree project to enhance the result given by watershed segmentation (marker controlled watershed).

    i am facing a problem in using watershed demo.

    the demo gives very fine result for pears.png image but when i change the picture, the results are not fine and in worst case it don’t gives result at all.
    kindly help me in this regard that why it happened, is it fault or watershed is not powerfull as shown in demo.

    although i enhanced the results in my project but my project working is dependent on the fine result of watershed.

    ok bye thanks in advance.

    plz respond me, if possible for your, or give me any tip/link/etc

  14. Steve replied on :

    Aamir – Unfortunately, there is no such thing as a “universal segmenter.” Each set of similar images generally requires a customized approach. Marker-controlled watershed segmentation is a generally useful technique, but the steps needed to come with the marker image will vary.

  15. Steve replied on :

    Rob – Sure, I’ll write something soon about isrgb and its cousins. Thanks for the suggestion.

  16. Ramiro Massol replied on :

    hi steve
    thanks for the advice. I try it again but didn’t work. Look at the code (below) of a very simple GUI composed of an axes, a slider, and a pushbutton. The annotation (arrow) dissappears after clicking on the slider and will only appear after clicking somewhere else on the figure. Uistack does not help to make the arrow visible.


    [Comment edited to remove code]

  17. Steve replied on :

    Ramiro – I don’t have any further suggestions for you on debugging your GUI program. You might consider contacting tech support.

  18. huanhuan replied on :

    hi, I would like to see some suggestion on image compressing ,like EZW ,SPIHT ,thank you !

  19. cloudy replied on :

    i need some suggestion on image compressing.specially,SPIHT,thank you!

  20. Mel replied on :

    Hey Steve,

    I need some code that can take a stereo pair and reconstruct a 3D image from it. Do you have any ideas?

    Mel

  21. Steve replied on :

    Mel – I don’t have anything like that, but there’s probably plenty of material on the web.

  22. salem selme replied on :

    HELLO!
    I use split and merge algorithm to segment my grayscale image.In matlab program, i use qtdecomp function to have quadtree decomposition but it give me a binary image at result.
    I need to obtain the grayscale one decomosed but i don’t know how can i proceed? please give me your help.

    thanks in advance.

  23. Steve replied on :

    Salem – I’m not sure what you mean. The qtdecomp function returns a sparse matrix, not a binary image. Here’s how to interpret the sparse matrix output. For a nonzero element S(i,j) = M, that means the decomposition has an M-by-M block whose upper left corner is (i,j).

  24. Subhani replied on :

    Hi Steve, My name is ALi Subhani and I am student of Bs Computer Engineering, i m doing mu final year project on 3D face modeling.. i search alot… i m doing my project using stereo pair of image (left and right) now the problem is i m confuse about the steps to perform…
    can u plz send me the steps to make 3D face from 2D image…and how can i create fundamental matrix…
    your blog is very good, i hope it will help me too..
    Take care bye

  25. Steve replied on :

    Subhani – I’m sorry, but I don’t have any information or personal experience with 3-D reconstruction from a stereo pair.

  26. mehmet replied on :

    hi
    I need some ideas about split and merge algorithm by using quadtree function to segment an image
    10x in advance

  27. Louis Levy replied on :

    Hello Steve,

    I am having some troubles using the qtedecomp function – I am trying to implement the splitmerge function you give as an exmaple in your Digital Image Processing book. So far I have managed to implement the split_test function which I put into the qtdecomp args as a function handle.
    However, I am not able to implement the predicate function. I have put its handle both into qtdecomp and split_test. I keep receiving the following error message:
    “Error: File: E:\Recherche\Matlab code\split_test.m Line: 1 Column: 41
    Missing variable or function.

    Error in ==> qtdecomp at 101
    doSplit = feval(func, blockValues, params{:});”
    Thank you in advance for helping me out.
    Regards,
    Louis

  28. Steve replied on :

    Louis—You probably have a syntax error in your function split_test. What happens if you call it directly?

  29. Louis Levy replied on :

    It gets me the same error:
    “Error: File::E:\Recherche\Matlab code\split_test.m Line: 1 Column: 41
    Missing variable or function.”
    This is the way I have defined split_test :
    function v = split_test(region, mindim, @predicate)

  30. Steve replied on :

    Louis—Yep, you have a MATLAB syntax error in your code. That @ doesn’t belong there.

  31. Louis Levy replied on :

    I have removed the predicate function from qtdecomp and split_test args and it works. But then I don’t understand why the args you use in the book for both functions include a “fun”. What is the correct syntax for declaring a function in another function’s args ?

  32. Steve replied on :

    Louis—MATLAB doesn’t have type declarations. “fun” is just a variable name. It’s up to the caller to make sure you pass in a function handle for that argument.

  33. Louis Levy replied on :

    I am still not familiar with function handles. I have read the Matlab help about that topic again and again but I still don’t get the whole picture.
    In other words, when you write in the book
    qtdecomp(f, @splitest_, mindim, fun)
    function v = split_test(B, mindim, fun)
    Fun can only be a variable right ? So what have function handles got to do with it ?

  34. Steve replied on :

    Louis—The value of the variable Fun should be a function handle.

  35. Louis Levy replied on :

    Is not @predicate a function handle ?

  36. Steve replied on :

    Louis—@predicate is an expression. The value of the expression has the type function_handle.

    In a function declaration line such as function v = split_test(a,b,c), what’s inside the parentheses should be a list of identifiers (variable names). @predicate isn’t a variable name.

  37. Louis Levy replied on :

    OK! I think I have got it but I still need to meditate that and sleep on it. I hope it will be clearer in the morning ! Thank you very much for your help and your patience.

  38. Steve replied on :

    Louis—OK. If meditation and sleep don’t work, then let’s continue by e-mail.

  39. Louis Levy replied on :

    Hello Steve,
    Still related to the splitmerge algorithm you suggest in your book, I am stuck with the implementation of the merge function.
    The algorithm is the following:
    - Pick up a splitted region, one after the other.
    - Collect that region’s adjacent regions. Pick up an adjacent region one after the other
    - Consider the region formed by the union of that region with its adjacent region. If they meet the splitmerge criteria, merge them.
    - Reiterate the process

    I have no idea how I could collect systematically the adjacent regions. I thought of collecting the neighbouring pixels of the region then find out the adjacent region to which they belong.
    This would work for the first iteration. Since the regions are still squared, you can easily retrieve the neighbouring pixels and the adjacent regions (though this part gets trickier). In any case, from the second iteration onwards, you no longer have squared regions.
    I could you some of your wise advice !
    Thank you in advance.

  40. Steve replied on :

    Louis—The book has an implementation of the merge procedure. If you have further questions about it, I’ll refer to Rafael Gonzalez, who wrote that part of the chapter and that code. His contact information is available at the book’s web site.

  41. Adnan Butt replied on :

    Hi Steve
    I am currently doing research and development work on Image Processing in MATLAB(or you can say that I am exploring Image Processing in MATLAB). I want to know that whether quantitaive measures are better for object identification or Qualitative measure? If qualitative mesuares are important then please list those measures so that I may be able to start my work on qualitative measures of an object.
    Regards

  42. Steve replied on :

    Adnan—I’m not really sure what you are talking about. Can you be more specific?

  43. Tavisha Verma replied on :

    Hi Steve, I am Masters student at Ohio and in the process of starting my MS thesis work this fallin the fied of Image Processing.. I wud want to work on Progressive Image Transmission invovling EZW technque..in MATLAB.perhaps take one of the methods of SPIHT and incoperate then in EZW and show how it helps in PIT ??!!

    My Q is would you suggestthis as a good reserach topic, is it too obsolete? I am in the begining of my research and wanted to take ur advise.

    Also, how shud I start with my MATLAB CODE, I have basic knowledge abt MATLAB but not a whole lot ? I am in a fix…please help..any direction wud be helpful !

  44. Steve replied on :

    Tavisha—I think your faculty members at Ohio would be able to give you better advice than I would about research directions for your thesis. It’s been 14 years since I did any research in image compression. As for MATLAB knowledge, I suggest that you work through the Getting Started section of the MATLAB Users Guide.

  45. JP replied on :

    Steve-
    I would love to see blog categories implemented.

    I love the quirky-bits-of-trivia blogs. I had a good time showing my students the background behind the default image. Every now and then they inadvertently stumble upon it and they think their computer is possessed by some MATLAB ghost.

    I also like “super user” tips. Like how to publish, or get rid of the gray border using iptsetpref, etc. Sometimes when you’ve been using MATLAB for a while, you’re not aware of the cool new tools until you try and run old code and a warning tells you that function’s about to become obsolete.

    Finally,I think your replies to “I’m about to start my Master’s thesis, whill you send me some code on how to do … ” are the essence of diplomacy.
    Jenelle

  46. Steve replied on :

    Jenelle—Thanks for your kind words, especially about my “diplomacy.” :-) Some of my e-mail actually reads more like this: “My Master’s project is due this month, will you send me some code …”

    I am going to start using categories more, and I like your “super user” tips idea.

  47. Praveen replied on :

    steve i m designing ezw encoder & decoder in matlab but i m a bit confused regarding arithmetic coding of ezw symbol stream… whether i should take whole ezw file or one dominant & subordinate pass o/p as message to be arithmetic encoded at one time…. in first case prob of truncation of bit stream for compression purpose will be there. & yeah code available at this site for ezw encoder is not working….

  48. Steve replied on :

    Praveen—I don’t know anything about EZW encoding.

  49. Redi replied on :

    Hi steve..
    i m designing image compression DWT SVD using arithmetic algorithm.. But I m a bit confused in design arithmetic coder and decoder.. I search in internet, but i don’t find it.. I find ‘design arithmetic coder and decoder for text compression’..But i m confusing to convert it into image compression..
    Could u help me to give me source code matlab of Arithmetic coding for image compression?
    Thank u..

  50. Steve replied on :

    Redi—When I search for “arithmetic coding” I find zillions of useful-looking links. I don’t have any MATLAB code. You may need to start with an image processing textbook that covers image compression techniques so that you can understand how an arithmetic code might fit into the overall system.


MathWorks
Steve Eddins is a software development manager in the MATLAB and image processing areas at MathWorks. Steve coauthored Digital Image Processing Using MATLAB. He writes here about image processing concepts, algorithm implementations, and MATLAB.

These postings are the author's and don't necessarily represent the opinions of The MathWorks.