在Julia中获取灰度图像的2D直方图

ane*_*eal 2 image-processing julia

使用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))
Run Code Online (Sandbox Code Playgroud)

现在我有一个1920X1080阵列的Uint8:

julia> img_gld_gs 
1920x1080 Array{Uint8,2}
Run Code Online (Sandbox Code Playgroud)

现在我想获得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)
Run Code Online (Sandbox Code Playgroud)

但是,而不是6x1080,我想直方图中的256个插槽显示每个值出现的总次数.我试过了:

julia> hist(img_gld_gs,256)
Run Code Online (Sandbox Code Playgroud)

但是这给了:

(2.0:1.0:252.0,
250x1080 Array{Int64,2}:
Run Code Online (Sandbox Code Playgroud)

因此,它不是256x1080阵列,而是250x1080.有没有办法强迫它有256个bin(不用编写我自己的hist函数)?我希望能够比较不同的图像,我希望每个图像的直方图具有相同数量的箱.

tho*_*oly 5

假设您想要整个图像的直方图(而不是每行一个),您可能需要

hist(vec(img_gld_gs), -1:255)
Run Code Online (Sandbox Code Playgroud)

首先将图像转换为1维向量.(您也可以使用img_gld_gs[:],但复制数据.)

另请注意此处的范围:hist函数使用左开间隔,因此除非使用小于0的值,否则将省略计数零.