我使用unique
命令从我的图像中获取独特的像素强度。然后我尝试使用它们制作直方图,但它没有使用所有强度值
I = imread('pout.tif');
[rows, columns] = size(I);
UniquePixels=unique(I);
hist=histogram(UniquePixels)
答案 0 :(得分:0)
另一种方法是将accumarray
与unique
结合使用。我会专门使用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
如果仔细检查输入示例和最终输出,您将看到只显示唯一像素与其计数一起显示。任何计数为零的箱都不会显示。