How to delete an item in a matrix by comparing the correlation with the next neighbor in a same column
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Dear all, I have faced a confusing matrix problem when I am learning image processing. Like if I have a matrix A(3*45), I would like to compare each row(1*45), if the row has a value, then get its position. Furthermore, if the following number doesn't have a value for more than 5 following steps, then stop counting the rest of the value. step Finally get the maximum (x1)and the minimum(x2) position in that row. Finally, put the answer into a matrix Q(X2, X1).Thank you !!
example:
A=[0,0,0,0,0,0,11,2,33,44,63,23,6,0,0,3,4,6,7,3,4,0,5,0,0,9,4,14,22,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0;
0,0,4,2,4,2,57,7,4,2,7,4,6,8,4,2,4,88,4,0,4,0,0,6,0,0,0,3,4,6,2,3,5,3,2,5,6,7,0,0,0,5,6,7,22;
0,0,6,4,5,0,0,0,0,0,0,0,0,0,3,4,5,6,2,3,4,6,4,2,3,3,6,4,5,2,1,9,9,5,3,1,3,0,0,0,0,0,0,0,0,]
Desired answer:
Q=[7,29;
3,45;
15,37]
Here is my code (it's not correct):
for j = 1:size(A)
line=A(j,:);
C=find(line>=1);
x1=max(C)
x2=min(C)
Q(x1,x2)
end
4 Kommentare
Jan
am 13 Dez. 2021
"I would like to compare each element in the same row." - again: with what? A comparison needs two elements.
Of course, I could guess, what you want. But if you express the procedure unequivocally in English, this is a sketch for the Matlab program already.
I could guess also, that "having a value" means and value differing from 0. But guessing is not efficient for programming.
"if the following neighbor (=>5)steps continue to be 0, then stop counting the rest of the position" - following what?
I have no idea, how you achive "(3,4,5,6,2,3,4,6,4,2,3,3,6,4,5,2,1,9,9,5,3,1,3)".
Antworten (3)
Jan
am 13 Dez. 2021
With bold guessing:
A=[0,0,0,0,0,0,11,22,33,44,63,23,6,0,0,3,4,6,7,3,4,0,5,0,0,9,4,14,22,0,0,0,0,0,0,0,0,0,0,0,3,4,0,0,0; ...
0,0,4,2,4,2,57,7,4,2,7,4,6,8,4,2,4,88,4,0,4,0,0,6,0,0,0,3,4,6,2,3,5,3,2,5,6,7,0,0,0,5,6,7,22; ...
0,0,6,4,5,0,0,0,0,0,0,0,0,0,3,4,5,6,2,3,4,6,4,2,3,3,6,4,5,2,1,9,9,5,3,1,3,0,0,0,0,0,0,0,0];
for j = 1:size(A, 1) % Not size(A), because this replies a vector!
line = A(j, :);
blockOfZeros = strfind(line(2:end), zeros(1, 5)) + 1;
if ~isempty(blockOfZeros)
line(blockOfZeros(1):end) = 0;
end
x1 = find(line, 1, 'last');
x2 = find(line, 1, 'first');
% ??? Q(x1,x2)
% How do you want to store x1 and x2 if no matching elements
% are found?
end
0 Kommentare
Image Analyst
am 13 Dez. 2021
Tell us what you REALLY want. Like, what are you going to do once you have the starting and ending columns at each row?
Chances are you can go line by line and use image processing functions like bwareaopen() or bwareafilt() or regionprops() to get certain regions. But I really need to know why you want these values.
And I also need to know why you want to stop counting if there are more than 5 0's in a row.
And Q can't be a rectangular array because it might be possible for you to have several runs, not exactly 2. Or do you want there to be 2? And what if there are more than 2? Just take the longest 2? If so, why?
Again we need the context for all this.
2 Kommentare
Image Analyst
am 13 Dez. 2021
So what if a line crosses 2 or more white blobs? Do you want to take just the largest on that line? Or do you want to take the largest blob overall in the image? Like
mask = bwareafilt(grayImage > 128, 1);
What about holes in the blobs? Do you wan tto ignore them and just go from the far left side to the far right size of the blob? Like
[rows, columns, numColors] = size(grayImage);
mask = imfill(mask, 'holes'); % Fill any black holes in blobs.
mask = bwareafilt(mask, 1); % Take largest blob in image.
widths = zeros(rows, 1);
for row = 1 : rows
thisRow = mask(row, :);
% Take longest run, in case some part of blob curves upwards into other rows.
% This happens about 60% of the way down in your sample image.
thisRow = bwareafilt(thisRow, 1);
widths(row) = sum(thisRow)
end
Siehe auch
Kategorien
Mehr zu Image Segmentation and Analysis 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!