图像缩略图

工具箱图

版本1.4.0.0(2.87 MB)由 Gabriel Peyre.
在图形上执行计算的工具箱。
4.6
48评级

47下载

更新2009年7月19日

视图版本历史

查看许可证

图论工具箱
版权所有(c)2007 Gabriel Peyre

此工具箱包含处理图形和三角剖分的有用函数。

一个有n个顶点的图的基本表示是邻接矩阵a,其中a (i,j)=1,如果顶点i连接到顶点j。一个图通常在R^d中有一个(d,n)矩阵,其中顶点(:,i)是第i个顶点的位置。

m个面和n个顶点的三角剖分表示为:
*一组面,是一个(3,m)矩阵,其中face(:,i)是第i个面的顶点索引。
*一组顶点是(d,n)矩阵。
工具箱包含更容易处理三角数据结构的函数,并允许检索顶点和面1环,并从邻接面切换到面。

工具箱的图部分包含创建合成图和计算最短路径的函数(dijkstra和isomap算法)。

这个工具箱包含了很多处理光谱三角测量理论的函数。可以从文件中加载三角剖分,然后显示生成的网格。它允许计算各种拉普拉斯算子,并允许使用谱分解、调和映射、自由边界调和映射和isomap计算参数化。

引用作为

Gabriel Peyre(2021年)。工具箱图(//www.tatmou.com/matlabcentral/fileexchange/5355-toolbox-graph), MATLAB中央文件交换。检索

意见及评分(73

迭戈母鸡

你好,这太棒了,谢谢。我对网格参数化有一个问题(这正是我需要的!)。有没有办法从参数化光盘恢复STL文件?如果有一个给定的参数化光盘,我如何进入另一个方向并获得三维身体?

简·库珀

完美的,
谢谢

迈克尔W

Jayant沙玛

Mohsin沙

"compute_curvature(veretx, face, options)"函数给出如下错误:
索引超出矩阵维度。
compute_曲率错误(第74行)
dp=和(正态(:,E(:,1)).*正态(:,E(:,2)),1);

如何修复这个错误?

普拉文·哈拉特

我的代码会给我警告
警告:读取顶点时出现问题。
>在read_off(第32行)
在我的(第4行)
警告:读取人脸时出现问题。
>输入读取关闭(第39行)
在我的(第4行)
在输出时显示空顶点和面孔请帮助我解决我的问题

filipp

嗨,虽然compute_curvature很容易实现,但它的输出似乎并不完全可靠。我计算了一个立方体的曲率,并得到了立方体平行边的不同曲率值-即使它们是完全相同的(只是在空间中平移)。其他曲率算法(然而显示出其他问题)对这些平行边产生相同的值。知道为什么会这样吗?
谢谢!

我通过VTK函数得到这个错误;“警告:读取顶点时出现问题。”

Suwoong Heo.

太酷了!谁能给我推荐一本与这个工具箱理论相关的教科书或论文吗?

托马斯Atta-Fosu

以下是“Compute_Curvature”中的错误75:“DP = Sum(正常(:,e(:,1))的替代方法。*正常(:,e(:,2)),1);

将以下代码复制并粘贴到第47行之后的“计算曲率”中,即在“s=[1:m1:m1:m];”行之后和“A=sparse(i,j,s,n,n)”之前

[u,ui,~] = unique([i' j'],'rows','stable');
s = s (:, ui);
i = u (: 1);
j=u(:,2);

Isfzade.

赛赫伯特

你好,谢谢你的投稿。
我认为read_ply.m函数中有一个小错误。当我运行它时,我得到了这个错误
引用不存在的字段'vertex_indices'。
读取错误(第16行)
vi = d.face.vertex_indices;

在第460行可能有几个字段名,但之后没有测试
propertyname = {'vertex_indices','vertex_indexes','vertex_index','indices','indexes'};

在我的情况下,通过将第26行更改为来容易解决错误
如果是isfield(d.face,'vertex_indices')
vi = d.face.vertex_indices;
elsefif isfield(d.face,'vertex_index')
vi=d.面.顶点指数;
结尾

赛赫伯特

金妮

对于read_vtk函数,“verbose”输入应该是什么?如果我不放任何值,我会得到'Warning: Problem in reading vertex '。

超雷

@az为什么我用你的方法修改代码,但compute_normal犯了一些错误?

玛丽亚Charalampidou

马克

看起来不错!

精卫壮族

莉莲阳

谢谢你的图书馆。
但是我在运行以下代码时遇到了问题:

选项。方法=“压扁”;
xy2 = compute_parameterization(顶点,面孔,选项);
options.method='isomap';
xy3 = compute_parameterization(顶点,面孔,选项);
%显示
clf;
子图(1,2,1);
图(A,xy2,'k.-');轴紧;
标题('Laplacian Eigenmaps');
子图(1,2,2);
plot_graph (xy3,“k -”);轴紧;
标题('ISOMAP');

错误的是:

下标索引必须是正整数类型或逻辑类型。

>dijkstra_init(第110行)
数据.A(起始顶点)=0;

错误执行_dijkstra_propagation_slow(第42行)
data = dijkstra_init(W, start_verts); / /开始

perform_dijkstra错误(第66行)
[D,S] = perform_dijkstra_propagation_slow(W',start_points-1,end_points-1,nb_iter_max, H);%使用transposate

compute_distance_graph错误(第34行)
[d,S] = perform_dijkstra(W, point_list(i));

误差等距图(第101行)
D = compute_distance_graph(w, points_list);

错误compute_parameterization(第78行)
Vertex1 = ISOMAP(D,NDIM,选项);

莉莲阳

王振义

亚历山大Naitzat

fxy

AZ.

我解决了“compute_曲率”中的一些bug(超出边界并除以零错误)。

复制下面的行,而不是第42-71行:

%将每个边缘关联到一对面
I = [face(1,:) face(2,:) face(3,:)];
J = [face(2,:) face(3,:) face(1,:)];

L = sub2ind([n, n], i, j);
[a, b] =嘘(L,独特的(L));
Q=ismember(L,b(a>1));
[i1,j1]=ind2sub([n,n],L(Q));
W=[i'j'];
R = ismember(W, [i1' j1'], 'rows');
j =查找(r);
[Q, K] = sortrows(W(R,:));
j = j(k);
[〜,ia,〜] =唯一(q,'行');
R = true(大小(J));
R (ia) = false;
J = (R);

S = [1:m 1:m];
s (J) = 0;
A=稀疏(i,j,s,n,n);%如果(i,j)是某个面上的边,那么A(i,j)是
%这个面部索引。

[j,我~]=找到(A);%直接联系

X=[i j];
Y = [j i];
[〜,i1,〜] =相交(x,y,'行');
I=X(I1,:);
K1=I(I(:,1)K2 = [k1 (:,2) k1 (:,1)];
[〜,〜,s1] = find(a(sub2ind(size(a),k1(:,1),k1(:,2))))));
(~, ~, s2) =找到((sub2ind(大小(A), K2 (: 1), K2 (:, 2))));

%链接边缘 - >面部
E = [s1 s2];
我= K2 (: 1);
j=K2(:,2);
ne =长度(i);%有关边缘的数量

%的边缘
E = vertex(:,j) - vertex(:,i);
d=sqrt(总和(e.^2,1));
d (d < eps) = 1;
E = E ./ repmat(d,3,1);
%避免太大的数字
d = d /意味着(d);

哈里哈兰·马哈林根

丹尼尔·弗里希

由于函数名或语法改变,以及缺少函数或输入文件,测试文件无法运行。这是令人遗憾的,因为这些测试文件可以让用户快速了解工具箱的功能。

邓长

你好,我试图通过'plot_mesh(vertex,faces,options) '绘制一个网格的法线;'它返回一个错误,说'plot_mesh(145行)Z和U必须是相同的大小"。我意识到从compute_normal函数返回的法线向量的大小是3*n。目前我修改了plot_mesh函数的145行“quiver3(顶点(sel,1),顶点(sel,2),顶点(sel,3),normal(1,sel)',normal(2,sel)',normal(3,sel)',normal_scaling);”,它工作。我只是想知道为什么你必须从compute_normal函数返回一个法线列表而不是一个法线向量?

邓长

Duc Fehr.

加扎勒

超级伟大的工具箱!

我需要在Matlab上有彩色网格。我尝试使用read_obj读取一个对象文件。但是没有成功地画出来。
你知道我如何在Matlab上给每个面分配一个颜色值的3D网格吗?

iMorrun

非常好的代码。但是在运行代码时仍然遇到了问题。当我想通过使用READ_PLY函数读取那个,系统总是给出这样的错误:16 vi = d.face.vertex.indices错误; ......我很匆忙,任何人都可以帮助我解决这个问题吗?顺便问一下,有谁知道可以下载的网站吗?

自我

弗里茨

@az:test_curvature.m对我来说使用“蘑菇”效果很好,见结果:
http://imgur.com/a/OA4xY

可能它与你的网格有关吗?你能上传一个例子吗?

AZ.

有人解决了“compute_curvature”中的bug吗-在第75行?

沙拉瓦兹

我解决了这个问题:)还有一个问题。我能把。ply文件读成网格文件而不是。off文件吗?

布朗吉

你好谢谢你的工具箱。
我想创建一个高清图像(1080x1920)的图形,但build_graph…返回错误,因为初始化非常大的图矩阵时内存不足。
你可能有任何建议如何解决这个问题。我想为高清图像或更大的分辨率实施一个滑稽算法。金宝搏官方网站

埃尔奥拉克

如何初始化OPTIONS ?

kijo这个词

要在Plot_mesh解决QuiviveR问题,您只需滚动到第139行并将代码更改为Quivivive3(顶点(SEL,1),顶点(SEL,2),Vertex(SEL,3),正常(1,SEL)',正常(2,SEL)',正常(3,SEL)',普通_caling);

理查德·肯纳韦

此工具箱中包含的select3d功能在2014b和2015a(预发布)中不再有效。它包含一个函数local_Data2PixelTransform,该函数尝试获取axes对象的属性“x_RenderTransform”、“x_renderofset”和“x_RenderScale”。这些属性不再存在。

埃尔奥拉克

如何使用compute_curvature

海伦

正如其他人指出的,compute_曲率函数在某些情况下会导致索引越界错误。到目前为止,我未经测试的随机“修复”是注释掉代码

%正常=正常';(第72行)和
再次插入
正常=正常';(在第146行,在compute_normal()之后)。

这似乎避免了超出索引的错误,但我不知道这是否是正确的事情,否则。

从加布里埃金宝app尔的一些支持,将受到高度赞赏。

非常感谢您的努力

(第75行“dp =总和(正常(:,E(: 1))。*正常(:,E(:, 2)), 1);”)

亚历克·雅各布森

谢谢你的图书馆。

刚刚花了不少时间在' write_ply '中追踪相同的bug。就像克里斯·罗登一年前发现的那样。请修复它。

dhara

很好的工具。非常感谢……
但是我可以读取这个。wrl文件cara1_abajo.wrl..谁能帮帮我…急事……我尝试了很多,但在重新调整命令时出现了错误

大卫

这似乎是一个有用的工具。
生成ply文件可能有错误。我总有这样一个小毛病。

使用write_ply时出错(第22行)
顶点的格式不正确。

但是,我严格遵循这个函数的输入格式。顶点是nb。向量x 3'数组,你能帮我一下吗?

好工具。

Hayoung.

非常感谢这个伟大的工具箱。
顺便说一句,他还在自己的网站(https://www.ceremade.dauphine.fr/~peyRe /matlab/graph/content.html),这也很好。

Hayoung.

感谢伟大的工具箱。

洛克

你好

谢谢你的代码。

当我使用plot_mesh时,我有一个问题,我可以可视化3D网格,我可以保持相同的图形或2d图像。当我使用“保持”然后“显示”时,它不起作用。

有人解决了在compute_曲率函数(在第75行"dp = sum(normal(:,E(: 1)) .* normal(:,E(: 2)), 1);")中的错误吗?谢谢!

anaS.

你好,

我问函数“red_obj()”是否可以读取具有纹理的模型?

我试过了,但它还是看不懂。

你能帮忙吗?

大卫

有一些代码显示几何图像。这个工具箱是否提供了从网格生成几何图像的代码?

克里斯Rorden

很多漂亮的代码。我确实发现了write_ply在创建超过32767个面的文件时的一个小错误。要解决这个问题,您需要更改这些行
IntegerDataMin =[-128 0 2 ^ 15日2 ^ 31日0];
IntegerDataMax=[127255,2^16-1,2^31-1,2^32-1];
阅读
IntegerDataMin =[-128 0 2 ^ 15 0 2 ^ 31日0];
IntegerDataMax=[127255,2^15-1,2^16-1,2^31-1,2^32-1];

埃坦

非常有用的工具。
我注意到compute_curvature尝试强制执行cmin <= cmax。在阴性cmax的情况下,它可以导致abs(cmin)> abs(cmax),我认为不对。imho可以从功能中删除这些行。

wikimenWoko wikk

薛儒莲

这里有办法画出邻接矩阵吗?

吉德里奇韦

看起来很有用。然而,isomap似乎失败了:
>> xy = isomap(dat);
???未定义的命令/函数“compute_nn_graph”。
==>等距图在85处出错
D=计算nn图(X,选项);

彼得

卡迈勒

很有用
对于某些曲面,compute_曲率将在第75行("dp = sum(normal(:,E(:,1)) .* normal(:,E(:,2)), 1);")上产生错误。
这个bug的解决方案是什么
谢谢

Raymond Cheng

谢谢分享。

YUANCHUN王

非常有用的。

但是我有一个问题:当我尝试使用函数“perform_mesh_simplify”来使网格简单化。Matlab说QSlim不是一个命令。下面是出现问题的命令:"system(['QSlim tmp.]smf - o tmp1。SMF -s ' num2str(nface)]);"

恐怕这是因为错过了qslim.exe ?

谢谢你的解释!

欧洲李

test\u diffusion\u wavelet.m文件不工作!
因为它缺少一些函数,如MakeDiffusion函数。
虽然我从MAURO MAGGIONI下载并安装了diffusion小波代码,但是我发现他的代码中的MakeDiffusion和你的不一样,比如你的MakeDiffusion中的参数gauss并没有包含在MAURO的MakeDiffusion中。

Ofra的

非常有用的。
有Matlab 2008b版本吗?

阿克塞尔郑

凉爽的!!!

大卫队

只想补充一点,我提到的错误是由在面部矩阵中的顶点的顺序重新排列顶点的阶段的表面正常的符号的翻转引起的

大卫队

非常有用,除了计算曲率函数中的一个错误:

对于某些曲面,compute_曲率将在第75行("dp = sum(normal(:,E(:,1)) .* normal(:,E(:,2)), 1);")上产生错误。错误源于E包含超出范围的索引,这是由第48行(“A = sparse(double(i),double(j),s,n,n);”)造成的,其中A的值最终完全组成了E矩阵。当i和j向量两次创建相同的有序对时,就会出现问题,在这种情况下,稀疏函数将两个s向量元素加在一起,导致一个值太大,无法用作第75行上的索引。例如,如果i = [1 1], j = [2 2], s =[3 4],那么A(1,2)将等于3 + 4 = 7。

i和j向量在这里创建:
I = [face(1,:) face(2,:) face(3,:)];
J = [face(2,:) face(3,:) face(1,:)];

事实上,你的代码似乎依赖于面矩阵中顶点的顺序,这让我担心,因为很明显,无论顺序如何,曲率都应该是相同的。公平地说,我不完全理解你的代码是如何工作的,所以也许它的编写方式并不重要,除非它确实很重要,当它导致索引越界错误,如前所述。

阿努普vibhute

非常有用的

巴拉姆酒店

非常有用的

Ben Abdallah Youssef.

非常有用的工具箱! !

将刘

江户乌拉

好的

哈立德•凯利

阿提拉阿尔泰•

很有用

lolo@loli.li瞧

完美的

MATLAB版本兼容性
使用R14创建
与任何版本兼容
平台兼容性
窗户 马科斯 Linux.

社区寻宝

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!

工具箱图/

Toolbox_Graph / Tests /

Toolbox_Graph / Toolbox /