首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图像中超像素的相邻和非相邻超像素

图像中超像素的相邻和非相邻超像素
EN

Stack Overflow用户
提问于 2019-03-02 14:57:17
回答 2查看 781关注 0票数 7

在将图像分割成N个超像素后,我需要指定与一个超像素相邻或不相邻的超像素,并确定所有超像素的这种关系。

代码语言:javascript
复制
[L,NumLabels] = superpixels(A,200);

如何为每个超像素指定相邻的超像素?

更新

“我试过了”Cris Luengo介绍的解决方案。然而,出现了以下错误:

代码语言:javascript
复制
B=imread('H.jpg');
[L,N] = superpixels(B,200);
glcms=graycomatrix(L);
k=glcms(:,50);    %SupNum=50
[r,~]=find(k>0); 
aa=find(r==50);
r(aa)=[];

更新2我遵循MATLAB中的说明,但它对我不起作用。对于SupNum=8,产生了以下结果:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-10 07:32:25

在对这个问题是在MATLAB上回答的。的回答中,有人暗示graycomatrix是解决这个问题的好方法。然而,这些答案是不完整的。

graycomatrix需要几个参数来完成我们需要它做的事情。它计算一个灰度值共现矩阵。这是一个矩阵,在单元格(i,j)中,灰色值i在另一个灰度值j旁边发生的频率。可以在此函数中定义“邻接”关系。默认情况下,graycomatrix返回一个8x8矩阵,其中它将图像中的所有灰度值装箱到8个回收箱中,并查找组i中发生在组j中任何灰度值旁边的任何灰度值。

因此,我们需要在这个共生矩阵中将我们的超像素图像中的每个标签分开(有不同的N标签,或灰度值)。我们还需要指定“邻接”关系为[1,0][0,1],即水平或垂直相邻的两个像素。当指定两个“邻接”关系时,我们得到两个共现矩阵,以三维矩阵的形式出现。还要注意的是,共生矩阵是不对称的,在我们的超像素图像中,标签i可能发生在标签j的左边,但是在这种情况下,j也不太可能发生在i的左侧。因此,glcms(i,j)将有一个非零计数,但glcms(j,i)将为零。在下面的代码中,我们通过显式地使矩阵对称来克服这一点。

这是代码:

代码语言:javascript
复制
B = imread('kobi.png'); % using one of MATLAB's standard images
[L,N] = superpixels(B,200);
glcms = graycomatrix(L,'NumLevels',N,'GrayLimits',[1,N],'Offset',[0,1;1,0]);
glcms = sum(glcms,3);    % add together the two matrices
glcms = glcms + glcms.'; % add upper and lower triangles together, make it symmetric
glcms(1:N+1:end) = 0;    % set the diagonal to zero, we don't want to see "1 is neighbor of 1"

glcms现在是邻接矩阵。如果超像素、ij是相邻的,则在i处的值为非零.该值指示两个超像素之间的边界有多大。

要计算邻接列表:

代码语言:javascript
复制
[I,J] = find(glcms);     % returns coordinates of non-zero elements
neighbors = [J,I]
票数 6
EN

Stack Overflow用户

发布于 2019-03-10 07:35:00

这里,我使用peppers.png作为示例映像。相邻超像素的像素用maskNeighb变量表示。唯一的问题是调整参数的灰斑。也许您将需要不同的参数为您的形象,但这应该让您开始。在图中,选择的超像素应该是黑色的,而邻居则是白色的。

代码语言:javascript
复制
B = imread('peppers.png');
% make superpixels
[L,N] = superpixels(B,200);
% find neighbors for all superpixels
glcms = graycomatrix(L,'NumLevels',N,'GrayLimits',[],'Symmetric',true);
% find superpixels k neighboring superpixel number 50
supNum = 50;
k=find(glcms(:,supNum));  
k(k == supNum) = [];
% find pixels that are in superpixel 50
maskPix = L == supNum;
% find pixels that are in neighbor superpixels k
maskNeighb = ismember(L,k);
% plot
maskPix3 = repmat(maskPix,1,1,3);
maskNeighb3 = repmat(maskNeighb,1,1,3);
Bneigbors = B;
Bneigbors(maskPix3) = 0;
Bneigbors(maskNeighb3) = 255;
figure;
imshow(Bneigbors)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54959824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档