示例:一维和二维柱状图
使用
imhist、imhist2 和
hist2d 函数来生成一维或二维柱状图。
imhist
此函数通过将强度范围分到 n 个容器中,来生成矩阵 M 的元素柱状图。每个容器都包含与其强度级范围相对应的像素数。例如,如果 n = 256,则在 8 位灰度图像中,每个可能的强度级都有一个容器。如果容器少于 256 个,则将以下列方式将强度级分到各容器中:
容器从 0 开始标记。如果容器多于 256 个,则容器的大小将小于 1。
1. 定义一个小矩阵,查看值之间的关系和柱状图的外观。
2. 定义将 imhist 函数应用到上述矩阵时所使用的容器数。
由于 n = 255,所以 256 个强度级中的每一个强度级都有其单独的容器。如矩阵 P 中所示,唯一一个应具有多个计数的容器为 150。
3. 绘制强度级的柱状图。
4. 将 n 设为一个较小的数,例如 5,观察有何不同。
由于 n = 5,所以 256 个强度级必须被分到 5 个单独的容器中。强度值 0 至 256/5 包括在容器 0 中,强度值 256/5 至 512/5 包括在容器 1 中,诸如此类。
如矩阵 P 和上面的柱状图所示,强度值的分布如下:
◦ 0、30、40 分布在容器 0 中 (0-51)
◦ 没有任何强度值分布在容器 1 中 (52-103)
◦ 120 和三个 150 位于容器 2 中 (103-154)
◦ 200 分布在容器 3 中 (154-205)
◦ 240 分布在容器 4 中 (205-256)
(pattern.bmp)
6. 将函数 imhist 应用于该图像。
图像中的空白区域 (强度值等于 255) 在右侧显示为一个大波峰。可以在其他容器中看到黑色和其他明显的灰色调。
7. 计算容器 0 (黑色) 和容器 255 (白色) 中的项数。
图片中灰色区域的不同深浅部分沿 x 轴显示为较小的波峰。
imhist2
此函数可用于值范围不在 0 - 255 之间的容器数据。
1. 定义一个矩阵,其中包含的元素不在 0 - 255 范围内。
2. 定义容器数,然后计算 n-容器柱状图。
3. 计算 n 个容器的端点。
hist2d
此函数可生成 M 和 N 这两个图像的二维柱状图,并且在每个维度都会创建 n 个容器。M 和 N 的大小必须相同。如果两个图像在相似的强度上具有相似的像素数,则 hist2d 的输出矩阵具有强对角。该函数将 0 - 255 范围分到 n 个容器中。
1. 定义容器数和两个大小相同的图像矩阵。
2. 使用矢量化运算符和上面定义的 bin_label 函数来计算 P 和 Q 的容器数。
二维柱状图是一个 n x n 矩阵,它在第 c 列、第 r 行存在计数 (只要存在容器编号为 c 的 Pbins 元素,并且 Qbins 的对应元素存在计数 r)。例如,Pbins 和 Qbins 的第一个元素为 0 和 2,因此,它们在柱状图矩阵的第 0 列,第 2 行生成一个计数。
3. 计算柱状图矩阵的方法是:先生成一个由零构成的矩阵,然后再加上这些计数。
4. 将上面的输出和 hist2d 的输出进行比较。
5. 要获得更具体的示例,可考虑使用下面的彩色图像。
(smallwar.bmp)
6. 使用
extract 函数分别提取绿色和蓝色分量,以便比较这两种颜色分量。
7. 显示二维柱状图
(hist2d.bmp)
8. 将该二维柱状图显示为对数标度的强度图像。
检查图像并观察强度差异。此二维柱状图中的强对角说明大多数像素在相应位置具有相似的强度。这对于同一张照片中的两个颜色分量而言完全合理。在纹理差异较大的两个图像中,对角不会太突出。