我遇到了麻烦,因为我有这个图像,我想做的就是使用不是黑色的像素。但是我必须找到第一个和最后一个非零值来定义边界,我会工作,问题是我可以找到第一个非零值(rowandcolumn),但是在最后一个列中出现的值是1799,而我的图像是499x631x3 uint8,它应该是533.问题是什么?
我的代码如下:
%Find where the image begins and starts
[r_min, c_min]=find(movingRegistered(:),1,'first');
[r_max, c_max]=find(movingRegistered(:,:),1,'last');
图片链接https://www.dropbox.com/s/6fkwi3xbicwzonz/registered%20image.png?dl=0
答案 0 :(得分:1)
要查找与每列第一个非零元素对应的行索引:
A2 = logical(any(A,3)); %// reduce to 2D array, which equals 0 if all three color
%// components are 0, and 1 otherwise
[~, row_first] = max(A2,[],1); %// the second output of `max` gives the row index of
%// the first maximum within each column
找到 last :
[~, row_last] = max(flipud(A2),[],1); %// matrix upside down to find last, not first
row_last = size(A,1)-row_last+1; %// correct because matrix was upside down
要查找线性索引意义上的第一个和最后一个:如上所述计算A2
并将代码应用于:
[r_min, c_min]=find(A2,1,'first');
[r_max, c_max]=find(A2,1,'last');