MATLAB Answers

Sean
0

Scan through an image to detect the mid points of 2 grey regions

Asked by Sean
on 19 Mar 2015
Latest activity Commented on by Sean
on 19 Mar 2015
Hi above is an image that Im trying to process. Im looking to automatically plot 2 lines through the middle of the 2 grey regions, i.e. scan up through the rows of the image and detect the end of the darker region then plot the midpoint, scan up through the image again and detect the lighter grey region and then plot the midpoint in that region. The reason Im looking to do this is that the beginning and end of these grey regions vary over images, with an automatic solution to plotting the middle row or midpoint of these segments will allow me to calculate further statistical analysis on the specified rows to give all the pixels in the image the same overall or average value.

  0 Comments

Sign in to comment.

1 Answer

Answer by Ashish Uthama on 19 Mar 2015
Edited by Ashish Uthama on 19 Mar 2015
 Accepted Answer

See if this gives you any ideas:
im = imread('/tmp/t.png');
imtool(im);
% RGB? gray scale
im = rgb2gray(im);
figure;
plot(im);
%%150 looks like a good threshold
imt = im>150;
imshow(imt,[]);
%%Clean it up (remove single pixel white or dark spots)
imtc = bwmorph(imt, 'clean');
imtc = ~bwmorph(~imtc,'clean');
imshowpair(imt, imtc)
%%Image looks fairly horizontal, process one vertical scan line at a time
lineImg = false(size(imtc));
for c = 1:size(imtc,2)
col = imtc(:,c);
transitions = diff(col);
transitionPoints = find(transitions);
if(numel(transitionPoints)~=2)
disp(['Skipping col ' num2str(c) '. Found multiple transitions']);
continue;
end
midpoint1 = round(mean(transitionPoints));
midpoint2 = round(mean([transitionPoints(2) numel(col)]));
lineImg(midpoint1, c) = true;
lineImg(midpoint2, c) = true;
end
imshowpair(im, lineImg);

  1 Comment

thank you for you help, the code has quite a lot of helpful material!

Sign in to comment.