Scan through an image to detect the mid points of 2 grey regions
1 回表示 (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
Ashish Uthama
2015 年 3 月 19 日
編集済み: Ashish Uthama
2015 年 3 月 19 日
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);
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Image Filtering and Enhancement についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!