DSP实验 直方图均衡化
2009-10-22 21:59
204 查看
折腾了一天,终于搞明白原理,把程序也调通了,真是惭愧,基础实在太差。
直方图均衡化的原理很简单,利用概率中的累积函数的性质,达到映射的目的,改变原图像的灰度分布,使之近似的均匀。
这是我在网上找的:
![](http://p.blog.csdn.net/images/p_blog_csdn_net/wethty/EntryImages/20091022/histogram.GIF)
这是我的程序:
float p[256];
float c[256];
Uint16 *ps,*tmp;
ps=(Uint16*)memaddr;//取一个象素(Cb/Y),所以Y为&0xFF00;
//初始化数组
for(i=0;i<256;i++)
{
Dia[i]=0;
p[i]=0.0f;
c[i]=0.0f;
}
for(i=0;i<480;i++)
{
for(j=0;j<720;j++)
{
gray=((*ps)&0xFF00)>>8;//取出当前象素Y值,0~255;
Dia[gray]=(Dia[gray]+1);//该级灰度值加一
//*ps=((*ps)&0xff00)+0x80;//二值化
ps++;
}
}
for(i=0;i<256;i++)
{
p[i]=(float)Dia[i]/(480*720);//p[]是归一化直方图
}
for(i=0;i<256;i++)
{
for(j=0;j<i;j++)
{
c[i]+=p[j];//c[]是累积归一化直方图
}
}
tmp=(Uint16*)memaddr;//取一个象素地址
ps=tmp;
for(i=0;i<480;i++)
{
for(j=0;j<720;j++)
{
gray=((*ps)&0xFF00)>>8;//取出当前象素Y值,0~255;
*ps= ((Uint8)(c[gray]*255)<<8)+0x80;
ps++;
}
}
主要分三步:
1. 求出原图像的灰度直方图Dia[];
2. 求原图像的累积直方图c[];
3. 把原图像的像素值映射为新的像素值,ps是指向原图像的指针。按照公式,原像素值通过原图像的CDF映射成为新像素值,由于C[]范围[0,1],而灰度级是255,故应乘以255转化为像素值。
另:
图像存储方式Y-Cb-Y-Cr,取Y做变换,色差设为0x80,不然颜色会有异常。
直方图均衡化的原理很简单,利用概率中的累积函数的性质,达到映射的目的,改变原图像的灰度分布,使之近似的均匀。
这是我在网上找的:
这是我的程序:
float p[256];
float c[256];
Uint16 *ps,*tmp;
ps=(Uint16*)memaddr;//取一个象素(Cb/Y),所以Y为&0xFF00;
//初始化数组
for(i=0;i<256;i++)
{
Dia[i]=0;
p[i]=0.0f;
c[i]=0.0f;
}
for(i=0;i<480;i++)
{
for(j=0;j<720;j++)
{
gray=((*ps)&0xFF00)>>8;//取出当前象素Y值,0~255;
Dia[gray]=(Dia[gray]+1);//该级灰度值加一
//*ps=((*ps)&0xff00)+0x80;//二值化
ps++;
}
}
for(i=0;i<256;i++)
{
p[i]=(float)Dia[i]/(480*720);//p[]是归一化直方图
}
for(i=0;i<256;i++)
{
for(j=0;j<i;j++)
{
c[i]+=p[j];//c[]是累积归一化直方图
}
}
tmp=(Uint16*)memaddr;//取一个象素地址
ps=tmp;
for(i=0;i<480;i++)
{
for(j=0;j<720;j++)
{
gray=((*ps)&0xFF00)>>8;//取出当前象素Y值,0~255;
*ps= ((Uint8)(c[gray]*255)<<8)+0x80;
ps++;
}
}
主要分三步:
1. 求出原图像的灰度直方图Dia[];
2. 求原图像的累积直方图c[];
3. 把原图像的像素值映射为新的像素值,ps是指向原图像的指针。按照公式,原像素值通过原图像的CDF映射成为新像素值,由于C[]范围[0,1],而灰度级是255,故应乘以255转化为像素值。
另:
图像存储方式Y-Cb-Y-Cr,取Y做变换,色差设为0x80,不然颜色会有异常。
相关文章推荐
- 【DM642学习笔记二】dsp基础实验:发光二级管的显示 led.c
- dsp--28335的使用fifo的串口中断实验(一)
- 多媒体技术实验--BMP图像的直方图均衡化
- DSP基础知识 (一) 20111128 -实验程序注释版
- DSP实验三(外部扩展)
- dsp低通滤波器设计实验之一:傅里叶变换
- 基于DSP28335的3KW单相光伏并网逆变实验台的搭建
- DSP芯片CMD文件中各段的实验验证(下)
- DSP软件优化小实验
- DSP实验——TSM320F2812
- DSP芯片CMD文件中各段的实验验证(上)
- DSP实验五(单路,多路模数转换)
- DSP实验二
- squid2.6配置反向代理实验
- 实验10
- c++实验3-个人所得税计算器
- 实验4 电机控制
- 王爽 汇编语言 实验十 汇编子程序设计
- 面向对象实验三( 组合、继承与多态性)
- C++实验3—个人所得税计算器