首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GLCM结果中的黑线

GLCM结果中的黑线
EN

Stack Overflow用户
提问于 2015-12-19 08:30:02
回答 3查看 456关注 0票数 1

它是GLCM矩阵的结果。GLCM图像中黑色水平线和垂直线的含义是什么?他们是个问题吗?

代码语言:javascript
复制
N = numel(unique(img)); % img is uint8
glcm = graycomatrix(img, 'NumLevels', N);
imshow(glcm)

EN

回答 3

Stack Overflow用户

发布于 2015-12-19 09:27:27

我怀疑这就是问题所在:对于函数graycomatrix,您提供了一个'NumLevels'参数,该参数大于图像中唯一灰度的数量。例如,256级(8位)图像将只有256个灰度级。在输出中要求1000个级别意味着744个级别将没有数据!即,是的,这是一个问题。您可以使用numel(unique(I))检查您的图像有多少灰度。

附注:以后,请附上您用来生成问题的代码。

票数 1
EN

Stack Overflow用户

发布于 2017-03-27 08:08:35

graycomatrix根据图像的缩放版本来计算全局最大似然比。由于缩放过程中的舍入误差,缩放图像中不同强度级别的数量可能少于原始图像中不同强度级别的数量。

考虑以下示例图像:

代码语言:javascript
复制
img = uint8([  48  161  209   64  133  240  166  227;
              184   54  181   33  107  252  242  255
              217  191  125  112  204  252  135  201
              163  222   66  125  229  140   38   97
              252  214  201  191   10  102  242   74
              191   74   77    8  163   51  189  186]);

来自documentation (重点是我的):

[glcms,SI] = graycomatrix(___)返回缩放的图像SI,用于计算灰度共生矩阵。SI中的值介于1NumLevels之间。

如果将NumLevels设置为不同强度级别的数量(在本例中为39)

代码语言:javascript
复制
N = numel(unique(img))
[glcm_scaled, img_scaled] = graycomatrix(img, 'NumLevels', N);

返回的GLCM包含39*39元素。问题是缩放后的图像只有28不同的强度级别:

代码语言:javascript
复制
>> img_scaled

img_scaled =

     8    25    32    10    21    37    26    35
    29     9    28     6    17    39    38    39
    34    30    20    18    32    39    21    31
    25    34    11    20    36    22     6    15
    39    33    31    30     2    16    38    12
    30    12    12     2    25     8    29    29

>> numel(unique(img_scaled))

ans =

    28

因此,GLCM将有11行11列,其中所有条目都为零(黑线)。

如果您不希望发生这种情况,可以通过查找表映射强度级别:

代码语言:javascript
复制
levels = unique(img);
N = numel(levels);
lut = zeros(256, 1);
for i=1:N;
    index = uint16(levels(i)) + 1;
    lut(index) = i;
end
img_lut = lut(uint16(img) + 1);
[glcm_mapped, img_mapped] = graycomatrix(img_lut, 'NumLevels', N, 'GrayLimits', []);

通过这样做,img_mappedimg_lut完全相同,并且在GLCM中没有黑线。请注意,通过为GrayLimits参数指定空方括号,graycomatrix使用输入图像中的最小和最大灰度值作为限制。

票数 1
EN

Stack Overflow用户

发布于 2021-02-07 08:20:37

我在我自己的GLCM实现中看到了同样的行为。问题是我实现了直方图均衡化,给出了一些灰度级。

我先计算图像的离散化,然后输入,以检查是否有任何行或列被赋予唯一的零值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34365953

复制
相关文章

相似问题

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