C#,图像二值化(14)——全局阈值的最佳迭代算法及源代码

news2024/9/21 14:51:49

1、图像二值化

图像二值化是将彩色图像转换为黑白图像。大多数计算机视觉应用程序将图片转换为二进制表示。图像越是未经处理,计算机就越容易解释其基本特征。

二值化过程

在计算机存储器中,所有文件通常以灰度级的形式存储,灰度级具有从0到255的最大256个不同灰度值。每个灰度值生成灰度调色板的不同颜色。如果需要文档图像中的某些信息,则需要进行多次操作。为了减少提取图像部分所需的时间,二进制图像更有用。

二值化是将任何灰度图像(多色调图像)转换为黑白图像(双色调图像)的方法。要执行二值化处理,首先找到灰度的阈值,并检查像素是否具有特定的灰度值。

如果像素的灰度值大于阈值,则将这些像素转换为白色。类似地,如果像素的灰度值小于阈值,则这些像素被转换为黑色。

下面讨论了两种类型的二值化方法——

(1) 基于全局或单个阈值的二值化

(2)基于区域的二值化

1.基于全局或单个阈值的二值化:通常,找到整个图像的全局阈值,并使用单个阈值对图像进行二值化。但是在这种单阈值方法中,图像的局部方差通常丢失或被抑制,这可能具有一些重要的信息或内容。

2.基于区域的二值化:还设计了另一种用于二值化的方法,其中阈值根据区域来确定。实际上,图像被划分为几个区域或窗口。每个区域或窗口计算或决定自己的局部阈值,然后根据Saha,借助其局部阈值将其区域转换为双色调区域。

在实际场景中,二值化过程失败,因为可能由于图像采集过程效率低、原始源质量差或原始源上的照明不均匀而导致退化。

Why do We Need Binarization?
 
Auto encoders are not able to recognize the images because of the noise in the images, otherwise referred to as “image processing.” For avoiding the background noise generated in images we will use a Binarization technique commonly empoloyed with artificial intelligence.
 

A Breakdown of Binarization
 
A color image consists of 3 channels (Red, Green and Blue) with values ranging from 0 to 255. One of the key features of binarization is converting grey scale images into black and white (0 and 1). What’s more, binarization provides sharper and clearer contours of various objects present in the image. This feature extraction improves the learning of AI models.

In the process of image binarization a threshold value is chosen, and all pixels with values above this threshold are classified as white, and all other pixels as black. The problem then is how to select the correct threshold (otherwise referred to as a thresholding method). 

One can see that binarization takes an image with foreground/background and returns the binary image. It discards the background noise and gives the contour of the image in the foreground. 

Steps involved in Image Binarization
 
The ‘imager ‘ package uses the K-means method to automatically identify the threshold for an image and this method is equivalent to globally optimal version of popular Otsu’s method. It is very important to know that an incorrect threshold value can result in distorted binary images, where parts of the object could be missing.

Manual Threshold Identification
 
Given an image, how do we calculate the threshold value?
The image below illustrates a histogram-based method which uses pixel values.

2、灰度图像二值化,全局算法,迭代最佳阈值算法及源代码

  二值算法综述请阅读:

C#,图像二值化(01)——二值化算法综述与二十三种算法目录https://blog.csdn.net/beijinghorn/article/details/128425225?spm=1001.2014.3001.5502

支持函数请阅读:

C#,图像二值化(02)——用于图像二值化处理的一些基本图像处理函数之C#源代码https://blog.csdn.net/beijinghorn/article/details/128425984?spm=1001.2014.3001.5502

using System;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Collections;
using System.Collections.Generic;
using System.Drawing.Imaging;
 
namespace Legalsoft.Truffer.ImageTools
{
    public static partial class BinarizationHelper
    {
        #region 灰度图像二值化 全局算法 迭代最佳阈值

        /// <summary>
        /// 迭代最佳阈值
        /// </summary>
        /// <param name="histogram"></param>
        /// <returns></returns>
        public static int Best_Iteratived_Threshold(int[] histogram)
        {
            int MinValue = Histogram_Left(histogram);
            int MaxValue = Histogram_Right(histogram);

            int Threshold = MinValue;
            int NewThreshold = (MaxValue + MinValue) / 2;
            int Iter = 0;
            double MeanValueOne, MeanValueTwo, SumOne, SumTwo, SumIntegralOne, SumIntegralTwo;
            while (Threshold != NewThreshold)
            {
                SumOne = 0;
                SumIntegralOne = 0;
                SumTwo = 0;
                SumIntegralTwo = 0;
                Threshold = NewThreshold;
                for (int i = MinValue; i <= Threshold; i++)
                {
                    SumIntegralOne += histogram[i] * (double)i;
                    SumOne += histogram[i];
                }
                MeanValueOne = SumIntegralOne / SumOne;
                for (int i = Threshold + 1; i <= MaxValue; i++)
                {
                    SumIntegralTwo += histogram[i] * (double)i;
                    SumTwo += histogram[i];
                }
                MeanValueTwo = SumIntegralTwo / SumTwo;
                NewThreshold = (int)((MeanValueOne + MeanValueTwo) / 2.0);

                Iter++;
                if (Iter >= 1000)
                {
                    return -1;
                }
            }
            return Threshold;
        }

        public static void Best_Iteratived_Algorithm(byte[,] data)
        {
            int[] histogram = Gray_Histogram(data);
            int threshold = Best_Iteratived_Threshold(histogram);
            Threshold_Algorithm(data, threshold);
        }

        #endregion
    }
}
 

3、灰度图像二值化,全局算法,迭代最佳阈值算法计算效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/141768.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

欢迎来到,个人数据安全“世界杯”

2022年国际足联世界杯&#xff0c;巴西止步8强&#xff0c;克罗地亚挺到半决赛&#xff0c;阿根廷与法国双强对决最终阿根廷点球大战胜出……精彩纷呈的世界杯已经落幕&#xff0c;而我们因足球而起的激情和热爱不会消退。世界杯是属于每个人的&#xff0c;每个球迷在世界杯中都…

03-redis篇 架构设计之一: 主从复制

目录 第一篇: 主从复制 二. 实践操作 1. 准备工作 -> ps: 安装redis的文章: docker版 的redis安装 2. 制作docker镜像 -> 2.1 制作redis6379 -> 2.2 制作redis6380 -> 2.3 制作redis6381 3. 查看主镜像redis6379的ip地址 -> 3.1 IPAddress位置在这: …

【数据库数据恢复】mdb_catalog.wt文件丢失的MongoDB数据恢复案例

MongoDB数据库数据恢复环境&#xff1a; MongoDB数据库部署在一台虚拟机上&#xff0c;虚拟机操作系统为Windows Server2012。 MongoDB数据库故障&分析&#xff1a; 由于业务发展需求&#xff0c;需要对MongoDB数据库内的文件进行迁移&#xff0c;在MongoDB服务开启的状态…

内部排序:希尔排序

希尔排序&#xff0c;又称为“缩小增量排序”&#xff0c;是直接插入排序的优化。 对于直接插入排序&#xff0c;当待排记录序列处于正序时&#xff0c;时间复杂度可达O(n)&#xff0c;若待排记录序列越接近有序&#xff0c;直接插入排序越高效。希尔排序的思想正是基于这个点…

QT(5)-QHeaderView

QHeaderView1 说明2 函数2.1 级联调整大小2.2 默认对齐方式2.3 count()2.4 表头默认单元格大小2.5 hiddenSectionCount()2.6 分区显示和隐藏2.7 表头高亮2.8 是否可以移动第一列2.7 是否显示排序索引2.8 表头长度2.9 逻辑索引2.10 表头分区最大/小大小2.11 移动分区2.12 表头偏…

Qlik帮助提升数据素养:新一代打工人“必备招式”

“营销”在业务推进过程中扮演着至关重要的角色。然而&#xff0c;当前营销的影响力却往往未得到广泛理解和重视。 在数字世界里&#xff0c;数据浩瀚如海&#xff0c;但如果“探险者”没有乘风破浪的能力&#xff0c;这片数据汪洋只能沉寂在角落里“吃灰”。而数据素养&#…

Ubuntu20.04 rosdep 失败解决方法

参考文章http://www.autolabor.com.cn/book/ROSTutorials/chapter1/12-roskai-fa-gong-ju-an-zhuang/124-an-zhuang-ros.htmlsudo gedit ./rosdistro/__init__.py sudo gedit ./rosdep2/gbpdistro_support.py sudo gedit ./rosdep2/sources_list.py sudo gedit ./rosdep2/rep3.…

厚积薄发打卡Day112:堆栈实践(二)<汉诺塔问题>

厚积薄发打卡Day112&#xff1a;堆栈实践&#xff08;二&#xff09;&#xff1c;汉诺塔问题&#xff1e; 问题 相传在古印度圣庙中&#xff0c;有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上&#xff0c;有三根杆(编号A、B、C)&#xff0c;在A杆自下而上、由大…

Jvm知识点二(GC)

GC 相关知识点一、垃圾收集器二、 java 中的引用三、 怎么判断对象是否可以被回收&#xff1f;四、 Java对象在虚拟机中的生命周期五、垃圾收集算法标记-清除算法复制算法补充知识点深拷贝和浅拷贝标记-压缩算法&#xff08;Mark-Compact&#xff09;分代收集算法Java堆的分区六…

SSH实验部署

一&#xff0c;实验要求 1&#xff0c;两台机器&#xff1a;第一台机器作为客户端&#xff0c;第二台机器作为服务器&#xff0c;在第一台使用rhce用户免 密登录第二台机器 2&#xff0c;禁止root用户远程登录和设置三个用户sshuser1, sshuser2, sshuser3&#xff0c; 只允许ss…

三维数学(二)

欧拉角 使用物体在三个旋转轴上的旋转角度来保存方位 API&#xff1a; Transform.eulerAngles&#xff1a;返回或设置物体的欧拉角 优点&#xff1a; 1.仅使用三个数字表达方位&#xff0c;占用空间小 2.沿坐标轴旋转的单位为角度&#xff0c;符合人的思考方式 3.任意…

OSPF网络类型实验配置(华为)

OSPF网络类型实验配置&#xff08;华为&#xff09;&#xff1a; 根据实验要求&#xff0c;我们可以把其拆分成为两个部分来做&#xff0c;分别做两个部分的MGRE: 通过拆分可以更加直观的看到路由器之间的信息传输&#xff0c;然后分别做R1,R2,R3和R1,R4,R5的MGRE&#xff1a;…

【Xilinx】如何自动格式化Verilog代码

开发环境VivadoVSCode 【Xilinx】自动格式化Verilog代码前言一、安装VSCode并修改Vivado的默认编辑器二、安装Verilog插件1. 语法插件2. 格式化插件三、演示&#xff1a;如何代码格式化1. 插件演示2. 修改默认插件附录前言 有时候接手别人的代码&#xff0c;或者从网上找的开源…

2023学习心得01

2023年&#xff0c;加足马力&#xff0c;继续提升自己&#xff01; 这次来分享下最近的学习心得&#xff0c;以便自己后续回顾可快速上手 按键框架数字&#xff0c;文字取模菜单框架Main总体框架1.首先来分析按键的框架&#xff0c;这里用到了函数指针&#xff0c;不同的可以…

并查集(C++)

根据下面这道题讲下并查集 &#xff08;其实本来是写题解的…写着写着就变成算法说明了&#xff09; [蓝桥杯 2017 国 C] 合根植物&#xff08;C&#xff0c;并查集&#xff09; 题目描述 w 星球的一个种植园&#xff0c;被分成 mnm \times nmn 个小格子&#xff08;东西方…

【深度腐蚀】深入聊聊KMP算法

思路分析&#xff1a;主串str遍历主串j子串sub遍历子串iKMP算法是一种字符串匹配算法&#xff0c;他通过Next 数组能使i不回退&#xff0c;这样大大减少了无效的比对&#xff0c;提高了字符串匹配的速度。Next数组&#xff1a;要想让i不回退&#xff0c;就需要让j回退到合适的位…

HTTPS】HTTPS过程详解,tcpdump抓包 全过程分析

RFC中的HTTPS交互过程如下&#xff1a; 抓包分析 Client Hello 客户端支持的TLS最高版本号 客户端生成的随机数 客户端支持的加密套件 主机名server_name cipher suite怎么理解 名字为 ECDH-ECDSA-AES128-SHA256 的CipherSuite 使用 ECDH做密钥交换&#xff0c; 使用ECDS…

21. 反爬工程师都会用的手段,IP限制反爬 - 爬虫训练场

本篇博客我们实现的案例是 IP 限制反爬&#xff0c;翻译过来就是每个 IP 在规定时间内限制访问次数。 例如&#xff0c;可以限制单 IP 每秒访问 5 次&#xff0c;超过之后就会返回 403 错误。 Flask 实现 IP 限制使用 Flask 插件自定义中间件限制 IP自定义请求钩子使用 Flask 插…

CSS3 滤镜效果

文章目录CSS3 滤镜效果概述说明使用案例鬼屋效果代码下载CSS3 滤镜效果 概述 在CSS3中&#xff0c;新增了滤镜效果&#xff0c;可以轻松实现黑白效果、复古效果、亮度效果等。 说明 语法 filter: 取值;filter属性取值 属性值说明brightness(百分比)亮度brightness()方法的…

一款数据可视化分析报表工具

在这个数据信息化时代&#xff0c;每分每秒都产生海量数据&#xff0c;在海量数据中&#xff0c;挖掘出有用的数据&#xff0c;并且能以直观的方式展示这些数据&#xff0c;变得尤为重要&#xff0c;大家或许还在为做报表感到为难&#xff0c;想在众多数据中处理&#xff0c;查…