图像的二值化原理和实现
1、 图像的二值化的基本原理
图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于再对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。如果某特定物体在内部有均匀一致的灰度值,并且其处在一个具有其他等级灰度值的均匀背景下,使用阀值法就可以得到比较的分割效果。如果物体同背景的差别表现不在灰度值上(比如纹理不同),可以将这个差别特征转换为灰度的差别,然后利用阀值选取技术来分割该图像。动态调节阀值实现图像的二值化可动态观察其分割图像的具体结果。
2、 图像的二值化的程序实现
以下程序是用QT实现的
bool convertGray::convertToBinary(int threshold)
{
QImage rgbImage(rgbFile);
QSize size = rgbImage.size();
QImage binaryImage(size, QImage::Format_RGB32);
int width = size.width();
int height = size.width();
for(int i = 0; i < size.width(); i++)
for(int j = 0; j < size.height(); j++)
{
QRgb pixel = rgbImage.pixel(i, j);
int r = qRed(pixel) * 0.3;
int g = qGreen(pixel) * 0.59;
int b = qBlue(pixel) * 0.11;
int rgb = r + g + b;//先把图像灰度化,转化为灰度图像
if (rgb > threshold)//然后按某一阀值进行二值化
{
rgb = 255;
}else
{
rgb = 0;
}
QRgb newPixel = qRgb(rgb, rgb, rgb);
binaryImage.setPixel(i, j, newPixel);
}
binaryImage.save(binaryFile);
ui.grayLabel->setPixmap(QPixmap(binaryFile));
return true;
}
3、 处理的效果