图像二值化

图像二值化是将像素点的灰度值设为0或255,使图像呈现明显的黑白效果。二值化之前需要把图像进行灰度处理。

(全局阈值法)固定阈值法   
Threshold为全局阈值,但是全局阈值不好确定,先尝试使用灰度图的平均像素作为全局阈值。

import cv2
import numpy as np
import matplotlib.pyplot as plt
image = cv2.imread("chatgpt.png")
# 加权求出灰度图
def weight_gray(image):
    weight_image = image[:, :, 0] * 0.11 + image[:, :, 1] * 0.59 + image[:, :, 2] * 0.3 # 三个通道加权求和
    weight_image = weight_image.astype(np.uint8)
    return weight_image
    
"""
像素平均值二值化
gray: 灰度图(ndarray)
return: 二值化图像(ndarray)
"""
def mean_threshold(gray):
    threshold = np.mean(gray)# 求平均像素值
    binary = np.where(gray >= threshold, 255, 0)
    binary = binary.astype(np.uint8)
    return binary
    
gray = weight_gray(image)
plt.figure(figsize=(10,10))
plt.subplot(121)#画子图   
plt.imshow(gray, cmap='gray')
plt.title("gray")
plt.subplot(122)#画子图   
plt.title("threshold")
plt.imshow(mean_threshold(gray), cmap='gray')

OTSU算法
OTSU是阈值分割中一种常用的算法,它可以根据图像自动生成最佳分割阈值。 OTSU的核心思想是类间方差最大化。

  1. 初始化一个阈值T0,将图像分为前景f和背景b;
  2. 图像像素点个数为图像N=height x width,前景像素个数Nf,背景像素个数Nb;
  3. 图像灰度等级L-1(0~255=256),每个灰度等级像素个数Ni,满足以下公式:
  4. 前景和背景的灰度平均值分别为:
  5. 整个图像灰度平均值:
  6. 求前景和背景之间的方差:
  7. 找到阈值T0,使得公式4最大;
  8. 怎么找?可以采用优化算法,本文中直接遍历灰度等级,查找最优阈值。
"""
统计像素点函数
image: 输入灰度图(ndarray)
reutrn: {像素:个数}(dict)
"""
def pixel_num(image):
    h, w = image.shape
    pdict = {}
    for i in range(h):
        for j in range(w):
            if image[i,j] in pdict:
                pdict[image[i,j]] += 1
            else:
                pdict[image[i,j]] = 0
    return pdict

"""
求公式4中sigma2的值
T0: 预设阈值(int)
gray: 灰度图(ndarray)
L: 灰度等级(int)
"""
def sigma2(T0, gray, L=256):
    h, w = gray.shape
    N = h * w
    pdict = pixel_num(gray)
    pf = sum([v for k,v in pdict.items() if k < T0]) / N#公式1
    pb = sum([v for k,v in pdict.items() if k >= T0]) / N#公式1
    pf = [pf if pf > 1e-6 else 1e-6][0]#控制最小值,避免除以0
    pb = [pb if pb > 1e-6 else 1e-6][0]#控制最小值,避免除以0
    mf = sum([k * pdict.get(k, 0) / N for k in range(T0)]) / pf#公式2
    mb = sum([k * pdict.get(k, 0) / N for k in range(T0, L)]) / pb#公式2
    M = pf * mf + pb * mb#公式3
    s2 = pf * (mf - M) ** 2 + pb * (mb - M) ** 2#公式4
    return s2, T0

"""
遍历查找最大sigma2
gray: 灰度图(ndarray)
L: 灰度等级(int)
"""
def otsu(gray, L=256):
    smax = 0
    tmax = 0
    for t in range(1, L):
        s2, T0 = sigma2(t, gray, L)
        if s2 > smax:
            smax = s2
            tmax = T0
    return smax, tmax

"""
根据最佳阈值求二值化图像
threshold: 最佳阈值(int)
return: 二值化图像(ndarray)
"""
def otsu_threshold(max_threshold, gray):
    threshold = np.mean(gray)
    binary = np.where(gray >= max_threshold, 255, 0)
    binary = binary.astype(np.uint8)
    return binary
    
smax, tmax = otsu(gray, 256)  
oimage = otsu_threshold(tmax, gray)
plt.figure(figsize=(10,10))
plt.subplot(121)#画子图
plt.imshow(mean_threshold(gray), cmap='gray')
plt.title("threshold")
plt.subplot(122)#画子图
plt.title("otsu")
plt.imshow(oimage, cmap='gray')

原文链接:https://blog.csdn.net/weixin_43828944/article/details/128911462

"老婆"与"老公"这类叫法来源阐述,都含有“相濡以沫、恩爱长久”的愿望

来源阐述:老婆”与“老公”这类叫法,都含有“相濡以沫、恩爱长久”的愿望。

在我国民间,夫妻之间常互称“老公”、“老婆”。

这是怎么来的呢? 相传此称呼最早出现于唐代,至今已有一千多年了。

唐朝时,有一位名叫麦爱新的读书人,他考中功名后,觉得自己的妻子年老色衰,便产生了嫌弃老妻再纳新欢的想法。于是,写了一副上联放在案头:“荷败莲残,落叶归根成老藕。”恰巧,对联被他的妻子看到了。妻子从联意中觉察到丈夫有了弃老纳新的念头,便提笔续写了下联:“禾黄稻熟,吹糠见米现新粮。”以“禾稻”对“荷莲”,以“新粮(新娘)”对“老藕(老偶)”,不仅对得十分工整贴切,新颖通俗,而且饶有趣味,针锋相对。麦爱新读了妻子的下联,被妻子的才思敏捷和拳拳爱心所打动,便放弃了弃旧纳新的念头。妻子见丈夫回心转意,不忘旧情,乃挥笔写道:“老公十分公道。”麦爱新也挥笔续写了下联:“老婆一片婆心。”

这个带有教育意义的故事很快流传开来,世代传为佳话,从此,汉语中就有了“老公”和“老婆”这两个词,民间也有了夫妻间互称“老公”和“老婆”的习俗。

近来有人说,“老公”“老婆”的说法,是先在港台等地流行起来后,才传进大陆的。其实,老公,老婆的称呼在大陆古已有之。《水浒传》中便有称丈夫为老公的说法。如《水浒传》第四十五回:潘巧云对裴如海说:“你且不要慌,我已寻思一条计了。我的老公,一个月倒有二十来日当牢上宿。我自买了迎儿,教他每日在后门里伺候。若是夜晚老公不在家时,便掇一个香桌儿出来,烧夜香为号,你便入来不妨。”至于称妻子为老婆的例子,古书中亦不胜枚举,《梦笔生花,杭州俗语》中有:“打老婆,骂老婆,手里无钱买老婆。”《蜃中楼》杂剧:“你就是怕老婆的乌龟了。”《红楼梦》第七十五回:“这个怕老婆的人,从不敢多走一步。”港台地区的流行称呼,也是源于内地的。