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