假设有一幅图像,共有64×64个像素,8个灰度级,各灰度级概率分布见下表 ,试将其直方图均匀化。matlab代码
时间: 2024-01-01 13:06:23 浏览: 117
这里给出Matlab代码实现直方图均衡化:
```matlab
% 读入图像
img = imread('image.jpg');
img_gray = rgb2gray(img);
% 统计直方图
[counts, bins] = imhist(img_gray, 8);
pdf = counts / sum(counts); % 计算概率密度函数
cdf = cumsum(pdf); % 计算累积分布函数
% 计算灰度级映射表
mapping = round(cdf * 7);
% 均衡化图像
img_eq = uint8(mapping(img_gray + 1));
% 显示结果
subplot(1, 2, 1), imshow(img_gray), title('Original Image');
subplot(1, 2, 2), imshow(img_eq), title('Equalized Image');
```
其中,`imread()`函数用于读取图像,`rgb2gray()`函数用于将图像转换为灰度图像,`imhist()`函数用于统计直方图,`cumsum()`函数用于计算累积分布函数,`round()`函数用于将灰度级映射表中的映射值四舍五入到最接近的整数,`uint8()`函数用于将均衡化后的图像转换为8位无符号整数类型,`mapping(img_gray + 1)`用于将每个像素的灰度值替换为其对应的均衡化值,最后使用`subplot()`和`imshow()`函数显示结果。
相关问题
假设有一幅图像,共有64×64个像素,8个灰度级,各灰度级概率分布见下表 ,试将其直方图均匀化。代码
这里给出Python代码实现直方图均衡化:
```python
import numpy as np
import cv2
# 读取图像
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
# 统计直方图
hist, bins = np.histogram(img, bins=8, range=(0, 255), density=True)
cdf = hist.cumsum() # 计算累积分布函数
# 计算灰度级映射表
mapping = np.round(cdf * 7).astype(int)
# 均衡化图像
img_eq = mapping[img]
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Equalized Image', img_eq)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`cv2.imread()`函数用于读取图像,`np.histogram()`函数用于统计直方图,`np.cumsum()`函数用于计算累积分布函数,`np.round()`函数用于将灰度级映射表中的映射值四舍五入到最接近的整数,`np.astype()`函数用于将映射值转换为整数类型,`mapping[img]`用于将每个像素的灰度值替换为其对应的均衡化值,最后使用`cv2.imshow()`函数显示结果。
假设有一幅 64×64 的 8 级灰度图像,下表为该图像中各灰度级的像素出现的次数, 请对该图像进行直方图均衡化处理,求出原图像与新图像之间灰度的映射关系。(要求 给出直方图均衡化处理过程)(8 分) 原图像 灰度级 r k 原各灰 度级像 r0=0 r1=1 r2=2 r3=3 r4=4 r5=5 r6=6 r7=7 790 1023 850 656 329 245 122 81
好的,让我来解答您的问题。
首先,我们需要计算出原图像的累计分布函数(CDF),即每个灰度级在原图像中出现的概率的累加值。计算公式如下:
CDF(rk) = Σ(r=0→rk) Pr(r)
其中,rk 表示当前灰度级,Pr(r) 表示灰度值为 r 的像素出现的概率。
根据题目中给出的原各灰度级像素出现次数,我们可以计算出每个灰度级的像素出现概率 Pr(r),如下表所示:
灰度级 rk 像素出现次数 像素出现概率 Pr(r)
0 790 0.122
1 1023 0.158
2 850 0.131
3 656 0.101
4 329 0.051
5 245 0.038
6 122 0.019
7 81 0.013
接下来,我们计算出每个灰度级在新图像中应该出现的概率。由于直方图均衡化的目的是使得新图像中每个灰度级的像素出现概率相等,因此新图像中每个灰度级的出现概率均为 1/8。新图像中每个灰度级的出现概率如下表所示:
灰度级 rk 像素出现概率 Pr'(rk)
0 0.125
1 0.125
2 0.125
3 0.125
4 0.125
5 0.125
6 0.125
7 0.125
接着,我们计算出新图像中每个灰度级对应的像素灰度值。根据直方图均衡化的原理,新图像中每个灰度级的像素灰度值应该是原图像中所有灰度级像素出现概率的累加和乘以灰度级数目减一(即 7)再取整。计算公式如下:
G(rk) = floor((L-1) * Σ(i=0→rk) Pr'(i))
其中,L 表示灰度级数目,即 8,floor 表示向下取整。
按照上述公式,我们可以计算出新图像中每个灰度级对应的像素灰度值,如下表所示:
灰度级 rk 像素出现概率 Pr'(rk) 像素灰度值 G(rk)
0 0.125 0
1 0.125 28
2 0.125 55
3 0.125 84
4 0.125 112
5 0.125 141
6 0.125 169
7 0.125 196
最后,我们需要将原图像中的每个像素灰度值映射到新图像中对应的像素灰度值。根据上表,我们可以得到原图像与新图像之间的灰度映射关系,如下表所示:
原像素灰度值 r 新像素灰度值 G(r)
0 0
1 0
2 0
... ...
27 1
28 1
29 1
... ...
54 2
55 2
56 2
... ...
83 3
84 3
85 3
... ...
111 4
112 4
113 4
... ...
140 5
141 5
142 5
... ...
168 6
169 6
170 6
... ...
195 7
196 7
197 7
... ...
以上就是整个直方图均衡化处理的过程以及灰度映射关系。希望能够帮助到您!
阅读全文