| 查看: 948 | 回复: 20 | |||
| 当前主题已经存档。 | |||
[交流]
【求助】类似于“二值图像的标识“的问题
|
|||
|
我有一三维图,想统计特定的点(1或2或3)的相邻情况,如果相邻有多少个相邻。相邻意味着坐标点之间距离有一个定值(通过xyz x‘y’z’计算)。我现在有一个Excell表 里面有点的坐标 xyz 及点的类型。例如下面的123代表类型 二维排列是这样。可以说两个3相邻,5个2相邻,5个1中 3个1邻为一组,2个1邻为一组。我想统计我的立体图中有几组由2组成的小组,几组由3组成的一组等等。 1 1 1 2 2 3 2 2 3 2 1 1 我没接触过图像,专业术语也不懂。请大家给予提示帮助(我只看过这和二值图像的标识别类似,但标识没介绍具体内容 我不知道怎么实现这个统计)。有没有这方面的代码。 先谢谢大家的帮助 例如 矩阵里面是m*4的内容,前三个是xyz第四列是类型。是一个三维立体图形,如何统计呢 只需要统计各个类型在三维中是如何连通的。 例如 x y z m 0 0 1 2 0 0 2 3 0 0 3 4 0 0 4 3 0 0 5 3 0 0 6 3 0 0 7 2 0 0 8 1 [ Last edited by tc1788 on 2009-11-12 at 20:47 ] |
» 猜你喜欢
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
孩子确诊有中度注意力缺陷
已经有6人回复
2026博士申请-功能高分子,水凝胶方向
已经有6人回复
论文投稿,期刊推荐
已经有4人回复
硕士和导师闹得不愉快
已经有13人回复
请问2026国家基金面上项目会启动申2停1吗
已经有5人回复
同一篇文章,用不同账号投稿对编辑决定是否送审有没有影响?
已经有3人回复
2楼2009-11-11 13:28:21
3楼2009-11-11 13:38:27
★ ★ ★ ★ ★ ★
tc1788(金币+2,VIP+0):先谢谢你了 我去试试 11-12 10:03
tc1788(金币+1,VIP+0):谢谢,我试过了 可能我的问题没有描述明白 我想重新描述一下 您看看您的程序是不是可以针对它使用 11-12 19:57
bslt(金币+3,VIP+0):感谢热心回复,欢迎常来! 11-14 10:12
tc1788(金币+2,VIP+0):先谢谢你了 我去试试 11-12 10:03
tc1788(金币+1,VIP+0):谢谢,我试过了 可能我的问题没有描述明白 我想重新描述一下 您看看您的程序是不是可以针对它使用 11-12 19:57
bslt(金币+3,VIP+0):感谢热心回复,欢迎常来! 11-14 10:12
|
图像只是数据的一种表现形式,有数据就行. e.g. Matlab处理: 1. 用函数xlsread将excel表格中的数据读进matlab,构成一个3D矩阵S. S的三个维分别代表x,y,z. S的元素是1,2,3之类的. 如果你的数据x,y,z不是正整数得做点坐标转化. 2. 比喻检测3的连通性. ind=find(S==3); BW=repmat(false,size(S)); BW(ind)=true; [L,num]=bwlabeln(BW,26);%按你的要求应该是26l连通. num:连通分量个数. for j=1:num L_num(j)=length(find(L==j)); end 上述结果num表示连在一起的3有num组. 第j组有L_num(j)个3. 我没有具体数据,不知道对不对. 试试就知道了. |
4楼2009-11-11 17:27:07
|
你给的数据其实是1D的. 前面不是给你代码了吗? Matlab code,e.g: clc;clear; row=9;col=9;dep=9;%维数 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. for i=min(S( ):max(S( )BW=S==i; %生成二值图。 [L,num]=bwlabeln(BW,26);%检测连通分量。按你的要求应该是26连通. %num:连通分量个数. for j=1:num L_num(j)=length(find(L==j)); %计算个数。 end %输入显示 fprintf(['值为 ' num2str(i) ' 的连通区域共有%d个,分布个数为\n'],num); for k=1:num fprintf(['连通分量' num2str(k) ': %d个\n'],L_num(k)); end fprintf('\n'); end 将dep设为1,看看2D下是不是你要的. |
5楼2009-11-14 11:30:42
6楼2009-11-14 11:32:12
|
您好 我试了一下有点问题 您给看看 S=[0 0 0 1 1 0 0 1 2 0 0 0 0 1 0 1 1 1 0 0 2 1 0 1 0 2 0 0 1 2 0 1 2 2 0 1 ]; clc;clear; row=9;col=9;dep=9;%维数 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. for i=min(S() :max(S()![]() BW=S==i; %生成二值图。 [L,num]=bwlabeln(BW,26);%检测连通分量。按你的要求应该是26连通. %num:连通分量个数. for j=1:num L_num(j)=length(find(L==j)); %计算个数。 end %输入显示 fprintf(['值为 ' num2str(i) ' 的连通区域共有%d个,分布个数为\n'],num); for k=1:num fprintf(['连通分量' num2str(k) ': %d个\n'],L_num(k)); end fprintf('\n'); end>> ??? for i=min(S() :max(S()![]() | Error: Unbalanced or unexpected parenthesis or bracket. 我是超级菜鸟了 谢谢您给予指点啊 [ Last edited by tc1788 on 2009-11-17 at 14:05 ] |
7楼2009-11-17 13:54:18
就笑脸 的地方是冒号括号: ).下面的可以直接粘贴到命令窗口了. 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. for i=min(min(min(S))):max(max(max(S))) BW=S==i; %生成二值图。 [L,num]=bwlabeln(BW,26);%检测连通分量。按你的要求应该是26连通. %num:连通分量个数. for j=1:num L_num(j)=length(find(L==j)); %计算个数。 end %输出显示 fprintf(['值为 ' num2str(i) ' 的连通区域共有%d个,分布个数为\n'],num); for k=1:num fprintf(['连通分量' num2str(k) ': %d个\n'],L_num(k)); end fprintf('\n'); end |
8楼2009-11-17 19:12:32
9楼2009-11-17 19:26:33
10楼2009-11-17 20:05:31













回复此楼
):max(S(