Matlab:图像直方图背后的原理,你确定真的懂嘛?

您所在的位置:网站首页 色阶表示什么 Matlab:图像直方图背后的原理,你确定真的懂嘛?

Matlab:图像直方图背后的原理,你确定真的懂嘛?

2024-06-14 07:59| 来源: 网络整理| 查看: 265

1. 扫描图像求nk,其中nk是第k个色阶在图像中出现的次数。

img=imread('E:/cola.jpg'); subplot(2,2,1),imshow(img); [m,n,K]=size(img); color_vector=zeros(1,300); for i=1:m for j=1:n k=img(i,j)+1; color_vector(k)=color_vector(k)+1; end end subplot(2,2,2),bar(color_vector);

2. 求pk=nk/MN,其中M和N分别是图像的高度和宽度。

img2=img;%新的图片 p=color_vector./(m*n);%对色阶进行像素的平均化。 s=zeros(1,256);%新的直方图

3. 遍历公式 s k = ∑ j = 0 k n j M N k = 0 , 1...... , L − 1 , 求 色 阶 映 射 数 组 [ L s k ] 。 s_k=\sum_{j=0}^{k}\frac{n_j}{MN}k=0,1......,L-1,求色阶映射数组[Ls_k]。 sk​=j=0∑k​MNnj​​k=0,1......,L−1,求色阶映射数组[Lsk​]。

for k=1:256 if k>1 s(k)=s(k-1)+p(k);%这里采用累加的思想,后来的sk是前面的sk和pk进行累加得来。 else s(k)=p(k);%s1前面不存在s0,所以直接是sk=pk。 end end

4.扫描图像根据色阶映射数组重建图像:将原图像中色阶为k的像素映射成色阶是[Lsk]的像素。

s=s*256;%将s映射到1~256的色阶范围。 for k=1:256 img2(img==k)=uint8(s(k));%用新的色阶数组替代原来的色阶数组。 end subplot(2,2,3),imshow(img2); for i=1:m for j=1:n k=img2(i,j)+1; color_vector(k)=color_vector(k)+1; end end subplot(2,2,4),bar(color_vector);%新的色阶直方图。

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3