matlab - 使用 KL 算法划分图和切割尺寸
问题描述
我有以下图表:
我正在尝试使用 KL 算法将此图划分为两组,每组 100 个节点。
我尝试使用 MATLAB 使用以下两个资源作为指南来执行此操作:
我的尝试:
clc;
close all;
clear all;
I=imread('graph.jpg');
I=im2double(I);
m=1;
for i=1:8:256
for j=1:8:256
for x=0:7
for y=0:7
img(x+1,y+1)=I(i+x,j+y);
end
end
k=0;
for l=1:8
img_expect{k+1}=img(:,l)*img(:,l)';
k=k+1;
end
imgexp=zeros(8:8);
for l=1:8
imgexp=imgexp+(1/8)*img_expect{l};%expectation of E[xx']
end
img_mean=zeros(8,1);
for l=1:8
img_mean=img_mean+(1/8)*img(:,l);
end
img_mean_trans=img_mean*img_mean';
img_covariance=imgexp - img_mean_trans;
[v{m},d{m}]=eig(img_covariance);
temp=v{m};
m=m+1;
for l=1:8
v{m-1}(:,l)=temp(:,8-(l-1));
end
for l=1:8
trans_img1(:,l)=v{m-1}*img(:,l);
end
for x=0:7
for y=0:7
transformed_img(i+x,j+y)=trans_img1(x+1,y+1);
end
end
mask=[1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 ];
trans_img=trans_img1.*mask;
for l=1:8
inv_trans_img(:,l)=v{m-1}'*trans_img(:,l);
end
for x=0:7
for y=0:7
inv_transformed_img(i+x,j+y)=inv_trans_img(x+1,y+1);
end
end
end
end
imshow(transformed_img);
figure
imshow(inv_transformed_img);
但是,上面的代码和链接的资源中的代码涉及矩阵,我不确定如何将其与我的图表相关联?
如何将此图划分为两组 100 个节点并在每个节点交换处削减大小值?
解决方案
推荐阅读
- c++ - Xcode调试C++查看全局变量
- html - 调整弹性项目的大小以适应容器(防止项目溢出)
- java - DateTimeFormatter 抛出异常“无法在索引 0 处解析”
- arrays - 如何将 json 数据附加到数组以填充 TableViewCell?
- clojure - Clojure 不能按我想要的方式工作
- python - 使用数百个链接在一起的 when 语句设置 DataFrame 的最有效方法是什么?
- python - 通过 ResNet18 提取灰度图像的特征向量:形状为 [1, 224, 224] 的输出与广播形状 [3, 224, 224] 不匹配
- android - 使用导航组件导航到活动时出现延迟
- python - 我想为使用 CLI 的面部识别程序实现 gui
- microsoft-graph-api - 如何允许 Microsoft Team 与会者以编程方式绕过大厅 (Microsoft Graph)