How a binary image can be divided into four equal parts using loop ?
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Zara Khan
el 23 de Feb. de 2018
Respondida: sumaiya khan
el 7 de Dic. de 2018
I have a binary image . I want to divide this into 4 equal parts using a loop and want to store each part individually. later I want to find out the no of white pixels in each parts.
3 comentarios
Image Analyst
el 25 de Feb. de 2018
OK, but does this mean that the center of the quadrants will be located at the center of the blob, or at the center of the image? And I presume that edges parallel with the edges of the image are okay? And that it's okay if each quadrant does not have the same number of pixels in it?
Respuesta aceptada
John BG
el 24 de Feb. de 2018
Editada: John BG
el 24 de Feb. de 2018
Hi Zara Khan
I use a for loop to answer your question, as requested, and I have added the variable nq to count the amount of pixels in each quadrant, please have a look, attached script and start image that I have reshaped to 16:9 format, to be able to tell what size was vertical and what horizontal:
1.
start image
clear all;clc;close all
A=imread('im02.png');imshow(A)
.
2.
the for loop with the counting of pixels for each quadrant:
d2=size(A,2);
d1=size(A,1);
vert_bord=floor(d1/2)
horz_bord=floor(d2/2)
nq=[0 0 0 0]; % 1st: top left quadrant red
% 2nd: top right quadrant green
% 3rd: bottom left quadrant blue
% 4th: bottom right quadrant magenta
hold all
A1=A(:,:,1);
for k=1:1:d1*d2
[nk1 nk2]=ind2sub([d1 d2],k);
if nk1<vert_bord && nk2<horz_bord
if A1(nk1,nk2)==255
nq(1)=nq(1)+1;
plot(nk2,nk1,'r.');
end
end;
if nk1<vert_bord && nk2>horz_bord
if A1(nk1,nk2)==255
nq(2)=nq(2)+1;
plot(nk2,nk1,'g.');
end
end;
if nk1>vert_bord && nk2<horz_bord
if A1(nk1,nk2)==255
nq(3)=nq(3)+1;
plot(nk2,nk1,'b.');
end
end;
if nk1>vert_bord && nk2>horz_bord
if A1(nk1,nk2)==255
nq(4)=nq(4)+1;
plot(nk2,nk1,'m.');
end
end;
end
.
3.
resulting quadrants, coloring just to check the counting is correct
.
4.
the amount of white pixels in each quadrant is
nq
=
1007 1084 1235 1666
.
nq(1): top left quadrant, red.
nq(2): top right quadrant, green.
nq(3): bottom left quadrant, blue.
nq(4): bottom right quadrant, magenta.
.
Zara
if you find this answer useful would you please be so kind to consider marking my answer as Accepted Answer?
To any other reader, if you find this answer useful please consider clicking on the thumbs-up vote link
thanks in advance for time and attention
John BG
15 comentarios
Guillaume
el 26 de Feb. de 2018
Zara,
We seem to have gone back to the same topic as your previous two questions, how-to-scan-an-image-to-find-out-the-row-or-column-that-will-be-the-first-background-pixel and how-to-divide-a-binary-image-into-equal-sized-square-considering-major-and-minor-axis-as-x-axis-or-y.
With your new question, that's now 4 on the same subject. What your questions seem to show is that you don't appear to know much about image processing, nor how image pixels are stored and accessed. I would suggest you spend more time learning about that from a book.
Más respuestas (2)
Guillaume
el 23 de Feb. de 2018
Editada: Guillaume
el 23 de Feb. de 2018
I'm not sure why or even how you'd use a loop.
[height, width, ncols] = size(yourimage);
splitimages = mat2cell(yourimage, [height height]/2, [width width]/2, ncols)
Your four images are splitimages{1}, splitimages{2}, splitimages{3}, and splitimages{4}.
To find the number of white pixels in each subimage:
numwhitepixels = cellfun(@(subimg) sum(sum(all(subimg == 1, 3))), splitimages); %assuming images of type double, where white == 1
edit: stupidly forgot the image argument to mat2cell!
4 comentarios
sumaiya khan
el 7 de Dic. de 2018
How can I diagnolly divide the image into 4 quadrants using the centroid of the blob ?
0 comentarios
Ver también
Categorías
Más información sobre Computer Vision with Simulink en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!