使用Images包,我可以打开彩色图像,将其转换为灰度,然后:
using Images
img_gld = imread("...path to some color jpg...")
img_gld_gs = convert(Image{Gray},img_gld)
#change from floats to Array of values between 0 and 255:
img_gld_gs = reinterpret(Uint8,data(img_gld_gs))
现在我已经获得了一个1920X1080阵列的Uint8&#39>:
julia> img_gld_gs
1920x1080 Array{Uint8,2}
现在我想获得Uint8值的2D数组的直方图:
julia> hist(img_gld_gs)
(0.0:50.0:300.0,
6x1080 Array{Int64,2}:
1302 1288 1293 1302 1297 1300 1257 1234 … 12 13 13 12 13 15 14
618 632 627 618 623 620 663 686 189 187 187 188 185 183 183
0 0 0 0 0 0 0 0 9 9 8 7 8 7 7
0 0 0 0 0 0 0 0 10 12 9 7 13 7 9
0 0 0 0 0 0 0 0 1238 1230 1236 1235 1230 1240 1234
0 0 0 0 0 0 0 0 … 462 469 467 471 471 468 473)
但是,不是6x1080,而是直方图中的256个插槽,以显示每个值出现的总次数。我试过了:
julia> hist(img_gld_gs,256)
但是这给了:
(2.0:1.0:252.0,
250x1080 Array{Int64,2}:
因此,它不是256x1080阵列,而是250x1080。有没有办法强迫它有256个bin(不用编写我自己的hist函数)?我希望能够比较不同的图像,我希望每个图像的直方图具有相同数量的箱。
答案 0 :(得分:5)
假设您想要整个图像的直方图(而不是每行一个),您可能需要
hist(vec(img_gld_gs), -1:255)
首先将图像转换为1维向量。 (您也可以使用img_gld_gs[:]
,但会复制数据。)
另请注意此处的范围:hist函数使用左开间隔,因此除非使用小于0的值,否则它将省略计数零。
答案 1 :(得分:4)