今天跟你们聊聊我最近捣鼓的一个小玩意儿——用 Matlab 画直方图。说起来,这直方图可是个好东西,能直观地看到一堆数据到底是怎么分布的。之前我一直觉得这玩意儿很高大上,直到最近自己上手试试,才发现没那么复杂。
我是看到网上有人说直方图能干啥干比如用来分析图像的灰度信息,或者分析一些随机数据的分布情况,我就心痒痒,想自己也试试。于是乎,我就打开 Matlab,开始琢磨这玩意儿到底咋弄。
Matlab 里面有两个函数可以画直方图,一个叫 histogram,另一个叫 rose。我主要用 histogram,这玩意儿用起来更顺手一些,而且 histogram 函数主要对直角坐标系,而 rose 主要是对极坐标系,对于我一个小项目来说用不到极坐标系,所以主要精力就在 histogram 函数这块。这俩兄弟一个是画直角坐标系的,一个是画极坐标系的,我这回主要用到的是直角坐标系的,所以就先拿 histogram 开刀。
你得有点数据才能画图不是?我就随便生成一堆随机数,用个叫 randn 的函数,这函数能生成一堆符合正态分布的随机数。我就生成 1000 个,然后存在一个叫 data 的变量里。这是第一步,准备好“原材料”。
就是画图。直接调用 histogram 函数,把 data 变量往里一扔,图就出来!简单?不过这只是最基本的操作,啥参数都没加,出来的图有点粗糙。我这个人,有点强迫症,看着不太舒服,就想调调细节。
比如说,我想看看数据主要集中在哪些区间,就得调整柱子的数量。histogram 函数里有个参数叫 'NumBins',就是用来设置柱子数量的。我试几个值,发现柱子数量多点,能看得更清楚一些。所以我就把 'NumBins' 设置成 20,这下子,数据分布的细节就更明显。
- 生成数据:
data = randn(1000, 1);
- 画直方图:
histogram(data);
- 调整柱子数量:
histogram(data, 'NumBins', 20);
这只是最简单的应用。我还看到网上有人用直方图来分析图像,比如说,把一张彩色图片转成灰度图,然后看看不同灰度值的像素点有多少。这个操作也挺简单的,先用 imread 函数读取一张图片,然后用 rgb2gray 函数把它转成灰度图,再用 histogram 函数画出灰度直方图。我还特意找一张叫 * 的图片来试试。通过调整直方图的色阶,我发现可以显示更多与 bin 有关的细节。挺有意思的!
这回折腾直方图,收获还是挺大的。以前觉得高大上的东西,自己动手试试,也就那么回事儿。Matlab 提供很多方便的函数,让数据可视化变得简单多。下次有啥新的发现,再来跟你们分享!