MATLAB Answers

0

Need to extract the curve above the red line in the binary image

Asked by Thomas Stolpe on 22 Nov 2019 at 1:18
Latest activity Answered by Image Analyst
on 22 Nov 2019 at 15:42
So i drew in a red line onto a matlab image i post processed using paint. The code I wrote does NOT create the red line
Is there a way to ignore all the linear parts of a binary image and extract the curved line?
Either;
1. delete all white pixels (not part of the curve) that are not above the red line
or
2. Simply plot what is above the red line..
If it helps this is the original project:
I need to crop out the droplet of water from the image named 'OG_image' without the user doing anything. The end goal is to be able to send multiple pictures similar to the one titled 'OG_image' to automatically get measurements
The image simply titled 'image' is as far as I got without seeking help.
If i can crop out just the droplet, I can finish the rest of the project...
This image is titled 'image' :
This image is titled: 'OG_image'

  2 Comments

I don't think it's possible
Of course it is.

Sign in to comment.

1 Answer

Answer by Image Analyst
on 22 Nov 2019 at 15:42
 Accepted Answer

Don't do an edge detection - beginners always try that first for some reason even when it's not appropriate. Try thresholding to get the dark stuff. Then use bwareafilt() to take the largest blob. Then what I'd do is to scan the binary image column by bolumn to get the top row. Then use the RANSAC function in the Computer Vision toolbox to find that slanted baseline. Once you have that you can erase the image below it, or even a little above it and below it if you want. Here's a start and I want you to try to finish it:
grayImage = imread(filename);
binaryImage = grayImage < someValue;
binaryImage = bwareafilt(binaryImage, 1);
[rows, columns] = size(binaryImage);
for col = 1 : columns
thisColumn = binaryImage(:, col);
topRows(col) = find(thisColumn, 1, 'first');
end
hold on;
plot(1:columns, topRows, 'r-', 'LineWidth', 2)
% Now call RANSAC
P = fitpolynomialRansac(topRows, 1)
% Get equation of a line (TO DO)
% Now erase from that line down
for col = 1 : columns
binaryImage(linesRow(col) : end, col) = false;
end
See if you can fill out the missing parts.

  0 Comments

Sign in to comment.