"James " <email@example.com> wrote in message <firstname.lastname@example.org>... > Hi all, > > I have an image which is the output of an experiment. It has totally vertical lines (unwanted), curving lines (wanted) and noise (obviously unwanted). > I have tried using methods such as sobel filtering to detect the vertical lines and then subtract them from the original image. However, I'm not sure if I am doing it wrong but the sobel filter creates two lines for each one it detects. I understand it is an edge detector so I guess it is detecting both 'edges' of this single pixel line. Is there any easy way to isolate these lines so I can then subtract them? > The second issue, and probably much harder, is that there are wanted features of the image which are very faint (in some cases fainter than the noise surrounding them). I have thought about maybe some sort of 'motion detection' in order to find repeating points however I have been unsuccessful. Can anyone suggest a way to do such a thing? > > Any help is gretly appreciated. > Thanks
If the lines are indeed totally vertical, then something along the _lines_ of the following might help:
%create a binary image with a vertical line, and a horizontal line imgin = false(50); imgin(:, 10:11) = true; imgin(10:15, :) = true;
%create a vertical structuring element larger than the vert_kern = strel('line', 7, 90);
%apply it, leaving only your vertical lines. imgout = imopen(imgin, vert_kern);
This would help you remove the lines after sobel detection, but you could also try it on your raw image, before sobel. Indeed, this might allow you to do a simple thresholding to get these vertical lines. After you have then isolated, removing them becomes much simpler.
As for detecting objects fainter than noise, an example image or two would do wonders, as "objects" isn't terribly descriptive.