配色: 字号:
第四讲 直方图及点运算
2012-12-14 | 阅:  转:  |  分享 
  
第四讲直方图及点运算

4.1直方图

4.2阈值变换;

4.3线性变换;

4.4非线性变换;



4.1直方图

1.直方图(Histogram)定义:

灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数,其横坐标是灰度级,纵坐标是该灰度出现的频率(像素个数)。

直方图的绘制

intiWidth=pDib->GetWidth(); //获取图像宽度

intiHeight=pDib->GetHeight(); //获取图像高度

intiBitsWidth=pDib->GetBitsWidth(); //获取图像存储宽度

unsignedcharlpPixel; //指向像素的指针

LPSTRlpStartBit=pDib->GetPixelBit(); //图像数据起始位置

inti,j; //循环变量

longplCount[256]; //每一个灰度级像素数



for(i=0;i
{

for(j=0;j
{

lpPixel=(unsignedchar)lpStartBit+iBitsWidthi+j; plCount[(lpPixel)]++;

}

}



直方图的数学含义

直方图性质:反映总体灰度分布

不包含空间位置信息

直方图的作用:数字化参数的选择

边界阈值选择

面积统计



4.2阈值变换;

1、定义:





T为阈值



阈值变换是重要的图像分割算法,可以通过阈值变换获取图像中感兴趣的对象。





intiWidth=pDib->GetWidth(); //获取图像宽度

intiHeight=pDib->GetHeight(); //获取图像高度

intiBitsWidth=pDib->GetBitsWidth(); //获取图像存储宽度

unsignedcharlpPixel; //指向像素的指针

LPSTRlpStartBit=pDib->GetPixelBit(); //图像数据起始位置

inti,j; //循环变量

for(i=0;i
{

for(j=0;j
{

lpPixel=(unsignedchar)lpStartBit+(iHeight-1-i)

iBitsWidth+j;

if(lpPixel>iThre)

lpPixel=255;

else

lpPixel=0;

}

}



4.3线性变换

1、定义

一种点运算,通过一个线性变换关系T,改变像素点灰度;



2.线性变换一









压缩灰度范围拉伸灰度范围







for(i=0;i
{

for(j=0;j
{

lpPixel=(unsignedchar)lpStartBit+(iHeight-1-i)

iBitsWidth+j;

temp=k(lpPixel);

if(temp>255.0)

lpPixel=255;

elseif(temp<0.0)

lpPixel=0;

else

lpPixel=(unsignedchar)(temp+0.5);

}

}





线性变换二灰度反转

for(i=0;i
{

for(j=0;j
{

lpPixel=(unsignedchar)lpStartBit+(iHeight-1-i)

iBitsWidth+j;

temp=255-lpPixel; lpPixel=temp;

}

}



线性变换三窗口变换

灰度区间[a,b],变换为灰度区间[c,d];区间[a,b]之外的灰度保持不变。变换函数为:









5.线性变换四限幅变换

灰度区间[0,a]变换为c;

灰度区间[a,b]变换为[c,d];

灰度区间[b,255]变换为d。

变换函数为:

6.线性变换五分段线性变换





2.非线性变换一对数变换

低灰度压缩;

高灰度拉伸















































献花(0)
+1
(本文系草本屋首藏)