How to extract ROI on grayscale image using edge detection
10 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Andraz Skoda
am 17 Nov. 2016
Kommentiert: Image Analyst
am 2 Mär. 2018
Hello.
I want to extract the white area on the image below (ROI) by using edge detection. I want to do this beacouse I must get very precise mask of white region. The image loks like this:
If I use some of matlab's inbuild function the prolem is that I also get edges outside of the white areas (on the border between black area and gray area).
I also have to close the whole white area to get mask, after properly detected edges...
Any other suggestions to calculate mask of white area on the first image?
Thank you all!!
0 Kommentare
Akzeptierte Antwort
Image Analyst
am 11 Dez. 2016
This is very easy, or can be. Just threshold. If you have noise then call imfill() and bwareafilt() to fill and extract the largest blob. Otherwise, simply use find(binaryImage, 1, 'first') to get the x location of the edge. Do for every row and then put into polyfit(x,y,1) to get the equation of a line. Then get the fitted coordinates of a perfect line. then compute the residuals (distances of actual edge to fitted edge). If the residual for any line is more than some certain amount, then there is a defect at that line.
Nowhere in what I said is an edge detection filter required.
Basically something like this:
binaryImage = grayImage > someValue;
binaryImage = imfill(binaryImage, 'holes'); % Optional. Delete for speed
binaryImage = bwareafilt(binaryImage, 1); % Optional, if there is noise in the dark left half.
[rows, columns] = size(binaryImage);
for y = 1 : rows
x(y) = find(binaryImage(y, :), 1, 'first');
end
% Switch x and y so y (line/row) is the independent variable.
y = x;
x = 1 : rows
coefficients = polyfit(x, y, 1); % Fit a line
yFitted = polyval(coefficients, x);
% Scan every line looking for deviation from fitted line
residuals = abs(y - yFitted);
% See if there are any big differences - find out what rows they're on.
defectLines = differences > someThreshold;
and so on. That's just off the otp of my head - not tested - so there may be errors but at least it will give you a start.
4 Kommentare
jasmine htwe
am 28 Feb. 2018
[rows, columns] = size(binaryImage); for y = 1 : rows x(y) = find(binaryImage(y, :), 1, 'first'); end % Switch x and y so y (line/row) is the independent variable. y = x; x = 1 : rows
When I run this part, I got this error.
Subscripted assignment dimension mismatch.
Error in differences (line 68) x(y)= find(binaryImage(y,:),1,'first');
My image size is (240,270). So, what can I do? plz give me suggestions?
Weitere Antworten (3)
Bego
am 17 Nov. 2016
Bearbeitet: Bego
am 17 Nov. 2016
Hello Andraz!
In order to solve this, you need to separate the black from the grey and from the white. To do so, it is necessary to apply a threshold algorithm which differentiates each one from another ( Thresholding a greyscale image).
At the moment I don't have Matlab with me, but I suggest you have a look at the following documentation about function imbinarize(): https://es.mathworks.com/help/images/ref/imbinarize.html?searchHighlight=threshold#inputarg_method ..specially to the coins example, in which you can see that the medium 'grey' has been supressed from the image.
Additionally, this demo might help you too: https://es.mathworks.com/matlabcentral/fileexchange/29372-thresholding-an-image
Regards,
0 Kommentare
Image Analyst
am 17 Nov. 2016
You don't want to use edge detection. Why would you want to do that??? Simply threshold and use sum(), bwarea(), or regionprops()
subplot(2,2,1);
imshow(grayImage, []);
subplot(2,2,2);
histogram(grayImage);
binaryImage = grayImage > someThreshold; %
subplot(2,2,3);
imshow(binaryImage);
area1 = sum(binaryImage(:))
area2 = bwarea(binaryImage)
props = regionprops(bwlabel(binaryImage), 'Area');
area3 = [props.Area]
0 Kommentare
Andraz Skoda
am 11 Dez. 2016
1 Kommentar
Qazi Arbab Ahmed
am 21 Dez. 2016
Skoda may be you can also use this one, bw = imopen(bw, strel('disk', 5)); It can help you !
Siehe auch
Kategorien
Mehr zu Image Processing and Computer Vision finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!