请问用什么函数能找出矩阵数据的边界?
大家好,我现在从文本中读出一个数据矩阵,无效数据设定为NaN,其他为有效数据。请问用什么函数可以找出此数据矩阵的边界,并将这些边界点X,Y坐标分别对应存放在两个向量里? 何谓边界点,是NAN,还是非NAN回复 #1 fsnow 的帖子
help find回复 #2 donkeyxu 的帖子
边界是NaN与数据之间的边界,数据只有矩阵中间一块,但大小不确定,有效数据外围为NaN。用edge找边界不太完整,而且中间的少数NaN点也会被看成是边界。
我想找出最外面的边界点坐标,再进行圆拟合
下图是读出后,用pcolor显示的图形
[ 本帖最后由 fsnow 于 2007-10-28 00:17 编辑 ] % M为二维数组
% BoundIdx % 边界
for k1=1:size(M,1)
NaNIdx=find(isnan(M(k1,:)))
JumpSize=diff(NaNIdx);
BI=find(JumpSize>=2);
if(isempty(BI)) %全部为NaN
BoundIdx(k1,1)= NaN;%左边界
BoundIdx(k1,2)=NaN; %右边界
else
BoundIdx(k1,1)= NaNIdx(BI(1));%左边界
BoundIdx(k1,2)=NaNIdx(BI(1)+1); %右边界
end
end
回复 #5 VibrationMaster 的帖子
非常感谢,将你的找边界代码稍作修改。终于实现了读数据,找边界并进行圆拟合的功能
% Fit a circle from a text data
%
= uigetfile('*.txt','Open Data');
filepath = strcat(pathname,filename);
if length(filepath) == 0
return;
end
Data = textread(filepath,'','delimiter',';','emptyvalue',NaN);%需根据具体情况修改
pcolor(Data), axis equal,axis tight, shading interp;
colorbar; hold on;
% find the boundary and fit to acircle
BoundIdx = []; BoundIdy = [];
for k1=1:size(Data,1)
NaNIdx=find(isnan(Data(k1,:)));
JumpSize=diff(NaNIdx);
BI=find(JumpSize>=2);
BINum = length(BI);
if ~(isempty(BI))
BoundIdx = ;
BoundIdy = ;
end
end
= circfit(BoundIdx,BoundIdy);
t = linspace(0,pi*2,100);
z = xc+yc*i+R*exp(i*t);
plot(BoundIdx,BoundIdy,'kx');
plot(z); hold off;
页:
[1]