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:
- Under the hood: Image processing algorithms and implementations
poly2mask, separable convolution, tetrahedral interpolation, findbounds
- In-depth series
pixel colors in MATLAB, spatial transformations
- Image processing examples
point positions in MRI phantom, cell segmentation
- Frequently-asked questions about image processing in MATLAB
translation confusion, batch processing, TIFF file resolution
- General interest; seen on the web
3-D blood vessel tracing, tracing skin lesions
- Image processing tips and tricks
morphological gradient, fast local sums, uniqueness of local maximum
- MATLAB language and graphics tips and tricks
labeling labeled objects, true and false, publish
- Fun
MATLAB default image, unusual red-eye reduction techniques, spatial transform contest
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.
11:28 UTC |
Posted in Uncategorized |
Permalink |
50 Comments »
You can follow any responses to this entry through the RSS 2.0 feed.
Both comments and pings are currently closed.
|
 |
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. 
|
 |
|
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).
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.
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
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
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
Patrick and feelfree – Thanks for the suggestions. I put them on my list.
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.
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.
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.
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
Dave – Thanks for the kind words.
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
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
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.
Rob – Sure, I’ll write something soon about isrgb and its cousins. Thanks for the suggestion.
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]
Ramiro – I don’t have any further suggestions for you on debugging your GUI program. You might consider contacting tech support.
hi, I would like to see some suggestion on image compressing ,like EZW ,SPIHT ,thank you !
i need some suggestion on image compressing.specially,SPIHT,thank you!
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
Mel – I don’t have anything like that, but there’s probably plenty of material on the web.
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.
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).
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
Subhani – I’m sorry, but I don’t have any information or personal experience with 3-D reconstruction from a stereo pair.
hi
I need some ideas about split and merge algorithm by using quadtree function to segment an image
10x in advance
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
Louis—You probably have a syntax error in your function split_test. What happens if you call it directly?
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)
Louis—Yep, you have a MATLAB syntax error in your code. That @ doesn’t belong there.
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 ?
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.
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 ?
Louis—The value of the variable Fun should be a function handle.
Is not @predicate a function handle ?
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.
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.
Louis—OK. If meditation and sleep don’t work, then let’s continue by e-mail.
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.
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.
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
Adnan—I’m not really sure what you are talking about. Can you be more specific?
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 !
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.
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
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.
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….
Praveen—I don’t know anything about EZW encoding.
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..
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.