C#,图像二值化(13)——基于双峰平均值的全局阈值算法与源程序

news2024/11/16 15:25:54

1、图像二值化概述

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

二值化过程

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

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

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

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

i、 基于全局或单个阈值的二值化

二。基于区域的二值化

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

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

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

Image binarization is turning a color image into a black-and-white one. Most computer vision applications transform the picture into a binary representation. The more unprocessed an image is, the simpler it is for the computer to interpret its underlying characteristics.

Binarization Process
In the computer memory generally all the documents are stored in the form of gray level which has a maximum 256 different gray values from 0 to 255. Each gray value generates the different color of the gray scale palette. If some information is required from the document image, then this is required to process the action number of times. To reduce this time requirement for extracting the part of the image, binary image is more useful.

Binarization is the method of converting any gray – scale image (multi tone image) into black – white image (two tone image) . To perform binarization process, first find the threshold value of gray scale and check whether a pixel having a particular gray value or not.

If the gray value of the pixels is greater than the threshold, then those pixels are converted into the white . Similarly if the gray value of the pixels is lesser than the threshold, then those pixels are converted into the black .

There is two type of binarization method is discuss below –

i. Binarization based on Global or Single Threshold
ii. Binarization based on Region

1. Binarization based on Global or Single Threshold: Normally, find the global threshold for the whole image and binarize the image using single threshold. But in this single threshold method generally the local variance of the image is lost or suppressed which may be having some important information or contents.

2. Binarization based on Region: One another method is also designed for binarization in which threshold decide according to the region. Actually the image is divided into several regions or windows. Each region or window calculate or decide their own local threshold and then convert their region into two – tone region by the help of their local threshold according of the Saha .

The binarization process is failed in the practical scenario because of degradation may be occur due to less efficient acquisition process of image, poor quality of original source or non – uniform illumination over the original source.
 

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 Intermodes_Threshold(int[] histogram)
        {
            double[] HistGramC = Histogram_To_Float(histogram);
            double[] HistGramCC = Histogram_To_Float(histogram);

            int Iter = 0;
            while (Is_Dimodal_Histogram(HistGramCC) == false)
            {
                HistGramCC[0] = (HistGramC[0] + HistGramC[0] + HistGramC[1]) / 3;
                for (int i = 1; i < 255; i++)
                {
                    HistGramCC[i] = (HistGramC[i - 1] + HistGramC[i] + HistGramC[i + 1]) / 3;
                }
                HistGramCC[255] = (HistGramC[254] + HistGramC[255] + HistGramC[255]) / 3;
                System.Buffer.BlockCopy(HistGramCC, 0, HistGramC, 0, 256 * sizeof(double));
                Iter++;
                if (Iter >= 10000)
                {
                    return -1;
                }
            }

            int[] Peak = new int[2];
            for (int i = 1, Index = 0; i < 255; i++)
            {
                if (HistGramCC[i - 1] < HistGramCC[i] && HistGramCC[i + 1] < HistGramCC[i])
                {
                    Peak[Index++] = i - 1;
                }
            }
            return ((Peak[0] + Peak[1]) / 2);
        }

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

        #endregion    
    }
}
 

3、基于双峰平均值的阈值算法的计算效果

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

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

相关文章

Linux Free 命令

目录 Free命令有什么用 各项名词解释 服务器实际可用内存看哪个值 为什么free2是实际可用内存 结论 Free命令语法 Free命令有什么用 熟悉的都知道&#xff0c;这是用来Linux主机内存使用情况的。如下&#xff1a; 各项名词解释 可以把上图看为3部分&#xff0c;分别是 M…

介绍一个Python可视化神器,绘制出来的图表惊艳了所有的人!!

新年快乐&#xff0c;时间过得真的是很快&#xff0c;已经到了新的一年了&#xff0c;今天小编给大家来介绍一款十分好用的可视化模块&#xff0c;D3Blocks&#xff0c;不仅可以用来绘制可动态交互的图表&#xff0c;并且导出的图表可以是HTML格式&#xff0c;方便在浏览器上面…

【小程序】模板与配置

文章目录WXML 模板语法数据绑定事件绑定bindtap 的语法格式bindinput 的语法格式实现文本框和 data 之间的数据同步条件渲染wx:ifhidden列表渲染WXSS 模板样式rpx样式导入全局样式和局部样式全局配置windowtabBar页面配置网络数据请求配置 request 合法域名发起 GET 请求发起 P…

XMLHttpRequest的基本使用

1、什么XMLHttpRequest XMLHttpRequest&#xff08;简称 xhr&#xff09;是浏览器提供的 Javascript 对象&#xff0c;通过它&#xff0c;可以请求服务器上的数据资源。之前所学的 jQuery 中的 Ajax 函数&#xff0c;就是基于 xhr 对象封装出来的。 2、使用xhr发起GET请求 步骤…

Java --- spring6的Bean的作用域

目录 一、bean的作用域为单例 二、bean的作用域为多例 三、Bean作用域的Scope属性的其它值 四、Bean作用域的自定义Scope 一、bean的作用域为单例 public class SpringBean {public SpringBean() {System.out.println("构造方法被调用");} } spring配置文件 &…

Java中的Future详解

1. Future的应用场景 在并发编程中&#xff0c;我们经常用到非阻塞的模型&#xff0c;在之前的多线程的三种实现中&#xff0c;不管是继承thread类还是实现runnable接口&#xff0c;都无法保证获取到之前的执行结果。通过实现Callback接口&#xff0c;并用Future可以来接收多线…

python 生成csv中文出现乱码问题解决

最开始的核心代码如下: with open("/hardisk/exeport.csv", "w") as f: 核心代码 f.writelines("时间,事件描述,源ip,源端口,目的ip,目的端口,协议,告警等级,接口,告警次数,事件英文详述" "\r") for v in raw: f.write(str(v).re…

Python 二维码的读取与生成:使用链接生成二维码、读取二维码里的链接

Python 二维码的读取与生成演示① 使用链接生成二维码② 读取二维码里的链接[ 文章推荐 ] Python 绘制中国地图&#xff1a;使用 pyecharts 最新版本绘制中国地图实例详解&#xff0c;个性化地图定制及常用参数解析 ① 使用链接生成二维码 通过 pip install qrcode 安装 qrco…

C#语言实例源码系列-游戏-实现贪吃蛇

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过程中…

云原生技术在离线交付场景中的实践

作者介绍&#xff1a;郭逊&#xff0c;交付部总监&#xff0c;7年运维经验&#xff0c;云原生深度爱好者软件产品只有交付到用户手中才有价值&#xff0c;本人在面向政府等 ToG 场景的软件交付领域具有数年的工作经验&#xff0c;深知其中痛点。今天借助这篇文章&#xff0c;分…

启动报名:首届“星河杯”隐私计算大赛正式上线

当前&#xff0c;隐私计算技术发展迅速&#xff0c;行业应用稳步增长&#xff0c;逐渐成为实现数据安全流通的关键技术路径之一。然而&#xff0c;隐私计算发展过程中仍面临技术应用瓶颈、行业影响有限等挑战&#xff0c;亟需加快技术攻关、提升行业影响、深化产业应用。在此背…

PyFlink1.16.0 使用说明:建表及连接Mysql数据库

PyFlink1.16.0 使用说明&#xff1a;建表及连接Mysql数据库引言安装运行环境PyFlink创建作业环境一、创建一个 Table API 批处理表环境二、创建一个 Table API 流处理表环境三、创建一个 DataStream API 数据流处理环境PyFlink建表一、从Python List对象创建一个 Table二、创建…

理解Cookie 和 Session 的工作流程

又是一年初,首先祝大家新年快乐!!!Cookie什么是Cookie?由于HTTP是一种无状态的协议, 服务器单从网络连接上是无法知道用户身份的. 这时候服务器就需要给客户端发一个cooki, 用来确认用户的身份.简单的来说, cookie就是客户端保存用户信息的一种机制, 用来记录用户的一些信息.找…

基于JAVA的数据可视化分析平台,自由制作任何您想要的数据看板,支持接入SQL、CSV、Excel、HTTP接口、JSON等

数据可视化分析平台 自由制作任何您想要的数据看板 简介 DataGear是一款数据可视化分析平台&#xff0c;自由制作任何您想要的数据看板&#xff0c;支持接入SQL、CSV、Excel、HTTP接口、JSON等多种数据源。 完整代码下载地址&#xff1a;基于JAVA的数据可视化分析平台&…

Python模块与包(八)

python学习之旅(八) &#x1f44d;查看更多可以关注查看首页或点击下方专栏目录 一.模块 (1) 什么是模块 一个Python文件,以.py 结尾,能定义函数,类和变量,也能包含可执行的代码 作用&#xff1a;我们可以认为不同的模块就是不同工具包,每一个工具包中都有各种不同的工具(如函…

Vue初识系列【2】

一 Vue入门 1.1 Vue简介 Vue 是一套用于构建用户界面的渐进式框架&#xff0c;发布于 2014 年 2 月。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库&#xff08;如&a…

ZYNQ printk 缓冲区读取

之前调试kenel &#xff0c;如果kenenl崩溃会&#xff0c;通过内核system.map定位log_buf变量地址&#xff0c;给cpu复位&#xff0c;在u-boot中读取对应的物理地址&#xff0c;即可知道最终内核崩溃最后打出的消息。 我在使用 5.4.154这个内核版本&#xff0c;中没有log_buf这…

金蝶附件上传接口开发思路

1️⃣需求描述&#xff1a;需要通过调用金蝶API接口实现指定单据的附件上传。本文以收料通知单为例&#xff0c;以Java代码示例进行讲解。 tips&#xff1a;阅读本文开始前&#xff0c;希望你是一名开发者同时阅读过&#xff1a; https://vip.kingdee.com/article/872325739310…

【小知识点】为爬虫训练场项目添加 Bootstrap5 时间轴

爬虫训练场建站时间轴&#xff1a;https://pachong.vip/timeline 背景 为了便于记录爬虫训练场项目更新日志&#xff0c;所以集成该功能&#xff0c;实现效果如下所示。 特别备注一下&#xff0c;时间轴是什么&#xff1f; 时间轴是一种常用的网站布局元素&#xff0c;通常用…

Forexclub:特斯拉四季度交付车辆创纪录,你认为2023年特斯拉销量如何

周一特斯拉宣布其2022年第四季度交付了创纪录的405278辆汽车。这一数字创下了该公司的纪录&#xff0c;但低于华尔街的估计。据报道&#xff0c;报告中对交付量的普遍估计为420760。特斯拉称&#xff1a;“2022年&#xff0c;汽车交付量同比增长40%&#xff0c;达到131万辆。”…