필터 지우기
필터 지우기

How to regroup or reconstruct connected elements in a binary image into squares

조회 수: 2 (최근 30일)
Hello, please I need help with this.
I have a binary image(50x50).
The matrix was randomly generated therefore making the image noisy. My aim is to regroup or reconstruct connected elements of same value together into different square shapes(not necessarily a perfect square), the edges of the square doesn't have to be smooth since the matrix is randomly generated. I did the following but I want to reconstruct all same elements into squares.
I = imread('Fig1.jpg');
BW = imbinarize(I); % Convert image to binary matrix.
L = bwlabeln(BW, 26) % Label connected elements.
  댓글 수: 4
KALYAN ACHARJYA
KALYAN ACHARJYA 2021년 8월 30일
After seeing the image, I request you to rethink the question? What is your actual objective?
Akakan-Abasi Okon
Akakan-Abasi Okon 2021년 8월 31일
Hi @KALYAN ACHARJYA, Sorry I didn't respond on time. I was thinking of a better way to put the question. The objective here is to remove the scattered pixels making the image noisy without distorting so much of the main squares/rectangle hidden in the noisy image. I initially thought regrouping them would help but it will be fine to remove them rather.

댓글을 달려면 로그인하십시오.

답변 (1개)

Image Analyst
Image Analyst 2021년 8월 30일
Why are you using bwlabeln()? For one thing, that's for 3-D images, not 2-D like you have. And what do you mean "of the same value"? Originally, you only have two values 0 and 1. Do you simply want a square that is all white with as many white dots there are in your original image?
numDots = nnz(BW);
rows = ceil(sqrt(numDots));
whiteSquare = ones(rows, rows);
numBlack = rows * rows - numDots;
if numBlack >= 1
whiteSquare(1:numBlack) = 0;
end
Of course if you label them each connected component will have it's own ID number. Not sure if you want 4 connected or 8 connected but I believe if you use 26 connected on a 2-D image you'll get 8 connected (if it doesn't throw an error).
  댓글 수: 12
Image Analyst
Image Analyst 2021년 9월 1일
Don't use the while. It's not needed and confusing since h<0 is a matrix -- a lot of values -- not a single value. What Walter gave you is sufficient and correct.
h(h == -1) = 0;
Again, delete the while and end lines.
Akakan-Abasi Okon
Akakan-Abasi Okon 2021년 9월 1일
@Image Analyst I think the problem was with my matlab, I restarted it and this 'h(h == -1) = 0;'is working fine now.

댓글을 달려면 로그인하십시오.

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by