24小时热门版块排行榜    

CyRhmU.jpeg
查看: 946  |  回复: 20
当前主题已经存档。

tc1788

铁虫 (小有名气)

引用回帖:
Originally posted by string121 at 2009-11-17 19:26:

放错地方了. 你注意看我开始的.

你程序里有将数据转换成矩阵的语句吗 我没找到诶
11楼2009-11-17 21:38:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

string121

金虫 (小有名气)

★ ★ ★
tc1788(金币+3,VIP+0):谢谢您的耐心讲解 我才看明白 谢谢你 可以实现计数功能 但是我有一点还想请教您 如果是周期性边界那计数该怎么统计呢? 11-25 19:09
Sample=reshape(round(1+2*rand(row*col*dep,1)),[row,col,dep]);%产生
%1-3之间的随机整数。
S(x,y,z)=Sample(x,y,z)%生成S.
这两句不就是吗? reshape就是数据格式的转换.
实在不会就用for循环将数据一个个排成S.
12楼2009-11-18 10:00:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tc1788

铁虫 (小有名气)

引用回帖:
Originally posted by string121 at 2009-11-18 10:00:
Sample=reshape(round(1+2*rand(row*col*dep,1)),[row,col,dep]);%产生
%1-3之间的随机整数。
S(x,y,z)=Sample(x,y,z)%生成S.
这两句不就是吗? reshape就是数据格式的转换.
实在不会就用for循环将数据一个个 ...

这是周期性边界的示意图 您看看 不是病毒您放心
13楼2009-11-25 19:43:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tc1788

铁虫 (小有名气)

引用回帖:
Originally posted by string121 at 2009-11-18 10:00:
Sample=reshape(round(1+2*rand(row*col*dep,1)),[row,col,dep]);%产生
%1-3之间的随机整数。
S(x,y,z)=Sample(x,y,z)%生成S.
这两句不就是吗? reshape就是数据格式的转换.
实在不会就用for循环将数据一个个 ...

这是周期性边界的示意图 您看看 不是病毒您放心
14楼2009-11-25 19:44:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

string121

金虫 (小有名气)

引用回帖:
Originally posted by tc1788 at 2009-11-25 19:44:

这是周期性边界的示意图 您看看 不是病毒您放心

你要熟悉图像的二值运算这个是不难的.
两种方式可处理:
1. 修改处于边缘连通分量的记数及标记. 用imfill(BW,'holes')就可以间接实现.
2. 直接修改找连通区域的算法bwlabel. 找本讲形态学处理的书看懂找连通区域的算法. Gonzalez那本<<数字图像处理>>上好像就有.
先告诉你方法你自己去试试吧, 实在不会我写给你代码.
15楼2009-11-28 12:59:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

string121

金虫 (小有名气)


tc1788(金币+1,VIP+0):谢谢!!! 12-7 18:56
引用回帖:
Originally posted by string121 at 2009-11-28 12:59:

你要熟悉图像的二值运算这个是不难的.
两种方式可处理:
1. 修改处于边缘连通分量的记数及标记. 用imfill(BW,'holes')就可以间接实现.
2. 直接修改找连通区域的算法bwlabel. 找本讲形态学处理的书看懂找连通 ...

抽空写了下code, 有些地方写的不好,但能解决你的问题:

clc;clear;
row=9;col=9;dep=1;%维数
x=1:row; %x坐标值,正整数,不是的话转化(平移,伸缩)一下。
y=1:col; %y坐标值
z=1:dep; %z坐标值
Sample=reshape(round(1+2*rand(row*col*dep,1)),[row,col,dep]);%产生
%1-3之间的随机整数。
S(x,y,z)=Sample(x,y,z)%生成S.

if size(S,3)==1
    padvec=[1 1];
else
    padvec=[1 1 1];
end

for i=min(min(min(S))):max(max(max(S)))
  BW=S==i;   %生成二值图。
  [L1,num1]=bwlabeln(BW,26); %找连通区域。
  %以下用于处理周期边值下边界连通区域的合并。
  L2=padarray(L1,padvec,0);
  L3=padarray(L1,padvec,'circular'); %周期延拓一个像素。
  BW1=padarray(BW,padvec,'circular');
  L4=bwlabeln(BW1,26);
  BW2=padarray(BW,padvec,0);
  ind1=find(BW1-BW2==1); % 找到可能需要合并的连通区域的位置。
  for j=1:length(ind1)
     a=ind1(j);
     ind2=find(L4==L4(a));
     if length(ind2)~=1
         b=unique(L3(ind2));
         for k=1:length(b)
             c=b(k);
             L2(L2==c)=b(1);
         end
     end  
  end

  num=0;
  for j=1:max(max(max(L2)));
     area=length(find(L2==j));
     if area~=0
        num=num+1;
        L_num(num)=area; %计算个数。
     end
  end
  %输出显示
  fprintf(['值为 ' num2str(i) ' 的连通区域共有%d个,分布个数为\n'],num);
  for k=1:num
    fprintf(['连通分量' num2str(k) ': %d个\n'],L_num(k));
  end
  fprintf('\n');
end

你要处理的3D数据量很大的话中间那几段for改用mex文件.
16楼2009-11-28 15:51:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tc1788

铁虫 (小有名气)

引用回帖:
Originally posted by string121 at 2009-11-28 15:51:

抽空写了下code, 有些地方写的不好,但能解决你的问题:

clc;clear;
row=9;col=9;dep=1;%维数
x=1:row; %x坐标值,正整数,不是的话转化(平移,伸缩)一下。
y=1:col; %y坐标值
z=1:dep; %z坐标值
Sample=r ...

您好 这段程序我用了一下 我的数据中不是123
而是01234等
运行的时候提示Attempted to access b(3); index out of bounds because numel(b)=2. 怎么回事呢?
17楼2009-12-01 21:17:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

string121

金虫 (小有名气)

引用回帖:
Originally posted by tc1788 at 2009-12-1 21:17:

您好 这段程序我用了一下 我的数据中不是123
而是01234等
运行的时候提示Attempted to access b(3); index out of bounds because numel(b)=2. 怎么回事呢?

数据只要是整数都行,没有关系.
我试过了.
提示是说b的指标超界了. b只有2个元素, 而用到了b(3).
你把k=1:length(b)换成k=1:numel(b)试下.
18楼2009-12-02 00:45:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tc1788

铁虫 (小有名气)

引用回帖:
Originally posted by string121 at 2009-12-2 00:45:

数据只要是整数都行,没有关系.
我试过了.
提示是说b的指标超界了. b只有2个元素, 而用到了b(3).
你把k=1:length(b)换成k=1:numel(b)试下.

Sample=reshape(round(1+2*rand(row*col*dep,1)),[row,col,dep]);%产生
我已经把1变成0,2变为4,之后就没有这个问题了。这样是不是就真的没有问题了,是与你提供的方法解决同样问题?
19楼2009-12-02 23:26:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

string121

金虫 (小有名气)

引用回帖:
Originally posted by tc1788 at 2009-12-2 23:26:


Sample=reshape(round(1+2*rand(row*col*dep,1)),[row,col,dep]);%产生
我已经把1变成0,2变为4,之后就没有这个问题了。这样是不是就真的没有问题了,是与你提供的方法解决同样问题?

Yes, of course.
20楼2009-12-03 00:13:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 tc1788 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见