二维otsu算法python_如何理解图像处理中的Otsu's 二值化算法(大津算法)Python编程实践...

本文介绍了Otsu's二值化(大津算法)的概念,通过Python代码展示了如何计算最优阈值并进行二值化处理。实验包括人工制造图像进行阈值设置和应用OpenCV库进行比较,最后使用实际手写数字图像进行验证。
摘要由CSDN通过智能技术生成

Otsu’s 二值化(大津算法)

二值化是什么?有什么用?

PDF扫描成电子版,文字识别,车牌识别等等图像处理场合均需要使用“二值化”操作。我们知道图像是一个矩阵组成,矩阵的元素是一个数字,这个数字是当前像素点对应的颜色(即像素值)。而图片的二值化操作就是将所有像素值变成要么是0要么是1.一般二值化怎么做的呢?答:“设置一个数字d,只要像素值大于这个阈值d那就设置为1,小于这个阈值d那就设置为0。当然也可以大于这个阈值设置为0,小于设置为1”。但是这个阈值怎么找到的呢?计算出一个合适的阈值出来这就是 Otsu’s 二值化(大津算法)要做的事情。

下面是一幅图片对应的像素值矩阵(图片就是矩阵):

[200,30,4013,40,45]\begin{bmatrix}

200,30,40\\

13, 40,45

\end{bmatrix}[200,30,4013,40,45​]

假设现在我通过Otsu’s 二值化(大津算法)计算出上面那个图片二值化的最优阈值是39.

那么上面那个图片就会被二值化为:

[1,0,10,1,1]\begin{bmatrix}

1,0,1\\

0, 1,1

\end{bmatrix}[1,0,10,1,1​]

下面我们实验下。

实验1. 造一个数据

做图像处理必备技能就是人工制造一个纯净的图片检验算法正确性

import numpy as np

import cv2

import matplotlib.pyplot as plt

######我们先制造一个200x200的图片用于二值化实验#######

def get_test_img():

img_mat = np.zeros((200,200),dtype=np.uint8)# 记得设置成整数,不然opencv会将大于1的浮点数全显示成白色

for row in range(200):

for col in range(200):

img_mat[row][col] = col

return img_mat

img_mat = get_test_img()

plt.imshow(img_mat,cmap='gray')# 显示图片

plt.xlabel("raw img")

如下所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值