将彩色图像转换为加权邻接矩阵
一个MATLAB答案问题今天早些时候吸引了我的注意。有着有一个加权邻接矩阵的伪彩色图像:
他有这张色度图
Borys想知道如何从这幅图像中计算真实的邻接矩阵,知道颜色尺度代表范围[0,5]。
这个问题对我来说很有趣,我想试一试。
image_url =“//www.tatmou.com/matlabcentral/answers/uploaded_files/410520/image.png”;scale_url =“//www.tatmou.com/matlabcentral/answers/uploaded_files/410525/image.png”;A = imread(image_url);
以下是我计划的方法:
1.使用白色方框确定邻接矩阵单元格的坐标网格。
2.从步骤1中找到的位置提取颜色。
3.对于每个提取的颜色,找出该颜色与刻度中的颜色之间的最小色差。
4.使用线性插值来确定对应邻接矩阵单元格的权重值(在0到5之间)。
我做的第一件事是使用像素区域工具检查白色方块是否完全是白色([255,255,255])。
imshow impixelregion
他们确实是。
接下来,我将计算一个与白色方块对应的掩模图像。
Mask = all(rgb ==重塑([255 255 255],1,1,3),3);imshow(面具)
![](http://www.tatmou.com/blogs/steve/files/image_to_adjacency_matrix_01.png)
乍一看,白色方块似乎没有相互接触,但为了确定,让我们稍微侵蚀一下它们。
Mask2 = imerosion (mask,ones(3,3));imshow (mask2)
![](http://www.tatmou.com/blogs/steve/files/image_to_adjacency_matrix_02.png)
现在,让我们找出每个白色方块的中心。
T =区域道具(“表”mask2,“重心”);头(T)
ans = 8×1 table Centroid ________________ 5.5 5.5 19 19 32 32 44.5 45 57.5 57.5 70.545 70.545 83 83 96 96
将质心坐标四舍五入到整数位置。
m = round(T.Centroid(:,2));n = round(T.Centroid(:,1));
我们再检查一下位置
图imshow(A)轴([n(1) n(6) m(1) m(6)]) hold住在为Q = 2:5为R = 2:5 x = n(R);Y = m(q);情节(x, y,“o”,“MarkerFaceColor”,“w”,“MarkerEdgeColor”,“k”)文本(x, y,”(“+ q +”、“+ r +")",...“HorizontalAlignment”,“中心”,...“VerticalAlignment”,“底”)结束结束持有从
![](http://www.tatmou.com/blogs/steve/files/image_to_adjacency_matrix_03.png)
看起来不错。现在,让我们提取其中一种颜色,并将其与刻度上的位置匹配。
读取比例图像并将其更改为Mx3颜色值矩阵。
Scale = imread(scale_url);刻度=刻度(1,:,:);Scale =重塑(Scale,[],3);
抓取邻接矩阵图像(5,3)单元格中的颜色。
c = A(m(5),n(3),:);
显示颜色
图像(c)
![](http://www.tatmou.com/blogs/steve/files/image_to_adjacency_matrix_04.png)
现在在颜色刻度中找到最接近的颜色。我将使用deltaE,我在我的30 - 2020年10月,职位.
C =重塑(C,1,3);D = deltaE(repmat(c,size(scale,1),1), scale);
让我们再次检查一下我们的工作。我希望有一个明确的最小值,可以识别出刻度上最接近的颜色。是这样吗?
情节(D)
![](http://www.tatmou.com/blogs/steve/files/image_to_adjacency_matrix_05.png)
看起来不错。
的最小值是多少D,在哪里发生?
[D_min,idx] = min(D);D_min
D_min = single 3.9335
idx
Idx = 341
现在我们可以使用插值来获得这个单元格的邻接单元格权值。回想一下,权重范围从0到5。
W = interp1([1 size(scale,1)], [0 5], idx)
W = 3.7363
我们有了计算的所有部分。现在,让我们计算每个单元格的权值。
为Q = 1:长度(m)为R = 1:长度(n)跳过对角线上的单元格。如果q ~= r c = A(m(q),n(r),:);C =重塑(C,1,3);C = repmat(C,size(scale,1),1);D = deltaE(c,scale);[D_min,idx] = min(D);Aw(q,r) = interp1([1 size(scale,1)],[0 5],idx);结束结束结束
最后,我们可以显示我们计算的加权邻接矩阵。除了对角线元素(使用此过程将显示为蓝色)之外,它看起来应该与我们开始时的图像非常相似。
imshow (Aw, []) colormap(规模)
![](http://www.tatmou.com/blogs/steve/files/image_to_adjacency_matrix_06.png)
太有趣了!
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。