大数跨境
0
0

【深度好文】图像二值化及实现

【深度好文】图像二值化及实现 AI算法之道
2021-06-27
2
导读:图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,本文介绍了全局二值化和自适应二值化的原理和具体实现方式。

图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。
百度百科

在介绍二值化算法之前,首先来引入阈值的概念:

【阈值】:阈值是在图像分割时作为区分物体与背景像素的门限,大于或等于阈值的像素属于物体,而其他像素属于背景。这种方法对于在物体与背景之间存在明显差别(对比)的景物分割十分有效。实际上,在任何实际应用的图像处理系统中,都要直接或间接用到阈值化技术,为了有效地分割物体与背景,人们发展了各种各样的阈值处理技术,包括全局阈值、自适应阈值等等。

【阈值化】:阈值化是指输入图像g到输出图像G的如下变换:

为了显示方便,也常常如下变换(因为1太暗和0难以区分)

图像处理中常用的二值化通常采用阈值化来完成。

【全局阈值】全局阈值是指整幅图像使用同一个阈值来处理,适用于背景和前景有明显对比的图像。

【自适应阈值】在许多情况下,物体和背景的对比度在图像中不是各处一样的,这时很难用统一的一个阈值来将物体和背景分开。这时可以根据图像的局部特征分别采用不同的阈值来进行处理。实际处理时,需要按照具体问题将图像分成若干子区域分别选择阈值,或者动态地根据一定的邻域范围选择各点处的阈值。

【代码实现】

1.读取灰度图像

%matplotlib inlineimport matplotlib as mplimport matplotlib.pyplot as pltimport numpy as npimport imageiofrom _utils import *# Input and normalize to [0, 1]img_in = imageio.imread('../_data/woman02.png')# Relight input images, t = np.mgrid[1:0:512j, 0:1:512j]**(1/2.2)img_in = (np.min(img_in, axis=2) + s*t*255)//2img_in = img_in.astype('uint8')# Visualizationhistogram(img_in, bins=2**8, interval=[0, 255])

  2.全局阈值实现

T = 127img_gt = img_in > T# Visualizationhistogram(img_gt, bins=2**8, interval=[0, 1])

  3.自适应阈值实现

阈值为该像素周围半径r内的邻域像素值均值减去常数C,公式如下:

# Parameters "constant" (C) and "radius" (r)C = 3r = 13# Imaging padding based on radius rimg_pad = np.pad(    img_in,    ((r, r), (r, r)),    'edge')# Init output imageimg_at = img_pad.copy()m, n = img_in.shapefor i in range(r, m + r):    for j in range(r, n + r):        block = img_pad[i-r:i+r+1,j-r:j+r+1]        T = np.mean(block) - C        img_at[i, j] = img_pad[i, j] > Thistogram(img_at[r:-r,r:-r], bins=2**8, interval=[0, 1])


【声明】内容源于网络
0
0
AI算法之道
一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
内容 573
粉丝 0
AI算法之道 一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
总阅读185
粉丝0
内容573