第四讲直方图及点运算
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.非线性变换一对数变换
低灰度压缩;
高灰度拉伸
|
|