12 views (last 30 days)

hi,

I am looking to creat two random binary images with remove overlapping. the second image should be random and not contact or overlape with first one.I have did this code:

clc; clear all;

A=[0 0 0 0 ;...

0 0 0 0 ;...

0 0 0 0 ;...

0 0 0 0 ;...

0 0 0 0];

N =2;

for k= 1:N

if k>1

(A(y0:y1,x0:x1)+1)==[];

if A>=0

X(k,:) = randi([1,min(size(A))],1,2);

Y(k,:) = randi([1,min(size(A))],1,2);

x0= min(X(k,:));

x1= max(X(k,:));

y0= min(Y(k,:));

y1= max(Y(k,:));

A(y0:y1,x0:x1)=1;

xyStart(k,:) = [y0,x0];

xyEnd(k,:) = [y1,x1];

end

else

X(k,:) = randi([1,min(size(A))],1,2);

Y(k,:) = randi([1,min(size(A))],1,2);

x0= min(X(k,:));

x1= max(X(k,:));

y0= min(Y(k,:));

y1= max(Y(k,:));

A(y0:y1,x0:x1)=1;

xyStart(k,:) = [y0,x0];

xyEnd(k,:) = [y1,x1];

end

end

this code work with first one but does not work with the seconed image, could you please help me?

one example of expect answer:(Note it are random)

A=[1 1 0 0 ;...

1 1 0 0 ;...

0 0 0 0 ;...

0 1 1 1 ;...

0 1 1 1];

Akira Agata
on 6 Dec 2019

OK, maybe I could understand your intention.

How about the following way?

nRow = 5;

nCol = 4;

while true

% Prepare a blank binary image

A = false(nRow,nCol);

% Put two rectangle randomly

for kk2 = 1:2

r = randi(nRow);

c = randi(nCol);

h = randi(nRow - r + 1);

w = randi(nCol - c + 1);

A(r:r+h-1,c:c+w-1) = true;

end

% If these two rectangles are separated, then stop the process

s = regionprops(A);

if numel(s) == 2

break;

end

end

Image Analyst
on 6 Dec 2019

OK, since he accepted, I guess that's what he meant. I'll try to rephrase it for others because it was confusing when he's asking about two binary images and then to "remove it". I believe it should say:

"I'd like to create one binary image with two distinct (non-overlapping) regions in it by randomly creating these regions in the image. The algorithm should create two regions in an image, and if these regions overlap or touch each other in the image, then discard that image and generate a new image (try again)."

Image Analyst
on 5 Dec 2019

You can just do this, if I understood correctly:

% Make a binary image of the combination of the images, but without the overlapping pixels

bw3 = xor(bw1, bw2);

% Or if you want each without the union...

overlapping = bw1 & bw2;

bw1a = bw1 & ~overlapping;

bw2a = bw2 & ~overlapping;

Image Analyst
on 5 Dec 2019

Still not sure what you want. Please give the two input binary images, and give the output you want.

Do you just want to crop out each 1 region into its own image, like I do in my Image Processing Tutorial in my File Exchange?

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

Start Hunting!
## 2 Comments

## Direct link to this comment

https://fr.mathworks.com/matlabcentral/answers/495043-how-to-generate-two-random-binary-images-with-remove-overlapping#comment_774972

⋮## Direct link to this comment

https://fr.mathworks.com/matlabcentral/answers/495043-how-to-generate-two-random-binary-images-with-remove-overlapping#comment_774972

## Direct link to this comment

https://fr.mathworks.com/matlabcentral/answers/495043-how-to-generate-two-random-binary-images-with-remove-overlapping#comment_775002

⋮## Direct link to this comment

https://fr.mathworks.com/matlabcentral/answers/495043-how-to-generate-two-random-binary-images-with-remove-overlapping#comment_775002

Sign in to comment.