Matlab 在没有imhist的情况下生成像素强度直方图

Matlab 在没有imhist的情况下生成像素强度直方图,matlab,histogram,Matlab,Histogram,我使用unique命令从图像中获取唯一的像素强度。然后我试着用它们制作一个直方图,但它没有使用所有的强度值 I = imread('pout.tif'); [rows, columns] = size(I); UniquePixels=unique(I); hist=histogram(UniquePixels) 另一种方法是结合使用。我会特别使用unique的第三个输出,将数据转换为1到N的连续序列,其中N是唯一强度的总数,然后利用unique的第一个输出,它将为您提供唯一强度列表。因此,如

我使用
unique
命令从图像中获取唯一的像素强度。然后我试着用它们制作一个直方图,但它没有使用所有的强度值

I = imread('pout.tif');
[rows, columns] = size(I);
UniquePixels=unique(I);
hist=histogram(UniquePixels)

另一种方法是结合使用。我会特别使用
unique
的第三个输出,将数据转换为1到
N
的连续序列,其中
N
是唯一强度的总数,然后利用
unique
的第一个输出,它将为您提供唯一强度列表。因此,如果
unique
的第一个输出是
A
,而
accumarray
的输出是
B
,其效果是在位置
B(i)
,这给出了
A(i)
的总强度

因此:

[UniquePixels, ~, id] = unique(I);
histo = accumarray(id, 1);
UniquePixels
提供所有唯一像素,
histo
提供与
UniquePixels
中每个元素对应的每个唯一像素的计数

下面是一个简单的例子:

>> I = randi(255, 10, 10)

I =

    42   115    28   111   218   107   199    60   140   237
   203    22   246   233   159    13   100    91    76   198
    80    59     2    47    90   231    62   210   190   125
   135   233   198    68   131   241   103     4    49   112
    43    39   209    38   103   126    25    11   176   114
   154   211   222    35    20   125    34    44    47    79
    68   138    22   222    62    87   241   166    94   130
   167   255   102   148    32   230   244   187   160   131
   176    20    67   141    47    95   147   166   199   209
   191   113   205    37    62    29    16   115    21   203

>> [UniquePixels, ~, id] = unique(I);
>> histo = accumarray(id, 1);
>> [UniquePixels histo]

ans =

     2     1
     4     1
    11     1
    13     1
    16     1
    20     2
    21     1
    22     2
    25     1
    28     1
    29     1
    32     1
    34     1
    35     1
    37     1
    38     1
    39     1
    42     1
    43     1
    44     1
    47     3
    49     1
    59     1
    60     1
    62     3
    67     1
    68     2
    76     1
    79     1
    80     1
    87     1
    90     1
    91     1
    94     1
    95     1
   100     1
   102     1
   103     2
   107     1
   111     1
   112     1
   113     1
   114     1
   115     2
   125     2
   126     1
   130     1
   131     2
   135     1
   138     1
   140     1
   141     1
   147     1
   148     1
   154     1
   159     1
   160     1
   166     2
   167     1
   176     2
   187     1
   190     1
   191     1
   198     2
   199     2
   203     2
   205     1
   209     2
   210     1
   211     1
   218     1
   222     2
   230     1
   231     1
   233     2
   237     1
   241     2
   244     1
   246     1
   255     1

如果您仔细检查输入示例和最终输出,您将看到只有唯一的像素与它们的计数一起显示。任何计数为零的箱子都不会显示。

do
hist=直方图(I(:),唯一像素)
UniquePixels
只是唯一的像素值。第二个参数的目的是什么?它是直方图的边。或者,您可以执行
hist=histogram(I(:),0:255)
,这将为图像中不存在的每个值提供0