Borrar filtros
Borrar filtros

how to apply the result of bwboundaries() output ?

2 visualizaciones (últimos 30 días)
Piyum Rangana
Piyum Rangana el 2 de Abr. de 2017
Comentada: Piyum Rangana el 4 de Abr. de 2017
This is the code.
%%%%%%Code begins %%%%
boundaries = bwboundaries(img);
NumOfBoundaries = size(boundaries, 1);
[x y t]= size(rgbImage);
ZeroPlate = redChannel == 0;
for k = 1 : NumOfBoundaries
thisBoundary = boundaries{k};
%%%%%I want to set Value '1' to 'ZeroPlate' co-%%%ordination given in 'thisBoundary' %%%%%%%%
%%%%%---------------the code goes here------------------%%%%
%%%%%end %%%%%
end
I want to set value '1' to the ZeroPlate (which is red-channel of the given image in which the pixel values are all zeros) according to the co-ordination obtaining from the values of 'boundaries' variable. How to do this ?

Respuesta aceptada

Image Analyst
Image Analyst el 3 de Abr. de 2017
Try this:
%%%%%%Code begins %%%%
boundaries = bwboundaries(img);
NumOfBoundaries = size(boundaries, 1);
% Get size.
% Note: it is NOT NOT NOT [x,y,numColors] = size(rgbImage) as you had it.
% rows is y, NOT x. But actually this line is not needed.
[rows, columns, numberOfColorChannels]= size(rgbImage);
ZeroPlate = redChannel == 0;
for k = 1 : NumOfBoundaries
thisBoundary = boundaries{k};
% Set Value '1' to 'ZeroPlate'
% coordinates given in 'thisBoundary'
x = thisBoundary(:, 1);
y = thisBoundary(:, 2);
for index = 1 : length(x)
% Get row and column.
row = y(index);
column = x(index);
% Set that row and column = true = 1.
ZeroPlate(row, column) = true;
end
end
  3 comentarios
Image Analyst
Image Analyst el 4 de Abr. de 2017
I set it equal to true because ZeroPlate is a binary image and you said you want the value to be 1 (true).
Actually you're right sort of - I switched x and y. I thought bwboundaries returned (x,y) coordinates but it doesn't - it returns (row, column) which is (y, x). So the correct code should be:
for k = 1 : NumOfBoundaries
thisBoundary = boundaries{k};
% Set Value '1' to 'ZeroPlate'
% coordinates given in 'thisBoundary'
x = thisBoundary(:, 2);
y = thisBoundary(:, 1);
for index = 1 : length(x)
% Get row and column.
row = y(index);
column = x(index);
% Set that row and column = true = 1.
ZeroPlate(row, column) = true;
end
end
Piyum Rangana
Piyum Rangana el 4 de Abr. de 2017
Thanks a lot for the support.

Iniciar sesión para comentar.

Más respuestas (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by