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

时间:2014-12-16 20:16:18

标签: 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))

现在我已经获得了一个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函数)?我希望能够比较不同的图像,我希望每个图像的直方图具有相同数量的箱。

2 个答案:

答案 0 :(得分:5)

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

hist(vec(img_gld_gs), -1:255)

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

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

答案 1 :(得分:4)

hist也接受一个向量(或范围)作为指定边界的可选参数,所以

hist(img_gld_gs, 0:256)

应该有用。