C#,图像二值化(05)——全局阈值的联高自适应算法及其源代码

news2024/12/29 14:39:45

阈值的选择当然希望智能、简单一些。应该能应付一般的图片。

What is Binarization?
Binarization is the process of transforming data features of any entity into vectors of binary numbers to make classifier algorithms more efficient. In a simple example, transforming an image’s gray-scale from the 0-255 spectrum to a 0-1 spectrum is binarization.

How is Binarization used?
In machine learning, even the most complex concepts can be transformed into binary form. For example, to binarize the sentence “The dog ate the cat,” every word is assigned an ID (for example dog-1, ate-2, the-3, cat-4). Then replace each word with the tag to provide a binary vector. In this case the vector: <3,1,2,3,4> can be refined by providing each word with four possible slots, then setting the slot to correspond with a specific word: <0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1>. This is commonly referred to as the bag-of-words-method.

Since the ultimate goal is to make this data easier for the classifier to read while minimizing memory usage, it’s not always necessary to encode the whole sentence or all the details of a complex concept. In this case, only the current state of how the data is parsed is needed for the classifier. For example, when the top word on the stack is used as the first word in the input queue. Since order is quite important, a simpler binary vector is preferable.

联高简化版自适应算法是个不错的选择。


using System;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Drawing.Imaging;

namespace Legalsoft.Truffer.ImageTools
{
    public static partial class BinarizationHelper
    {

        #region 灰度图像二值化 全局算法 联高 算法

        /// <summary>
        /// 计算图片的自适应灰度阈值
        /// </summary>
        /// <param name="data">灰度化的图片数据</param>
        /// <returns></returns>
        public static byte Adaptive_Threshold(byte[,] data, double ratio)
        {
            int height = data.GetLength(0);
            int width = data.GetLength(1);
            int[] histogram = Gray_Histogram(data);

            double sum = (width * height) / ratio;

            int cnt = 0;
            byte left = 0;
            while (left < 255 && cnt < sum)
            {
                cnt += histogram[left++];
            }

            cnt = 0;
            byte right = 255;
            while (right > left && cnt < sum)
            {
                cnt += histogram[right--];
            }

            return (byte)((left + right) / 2);
        }

        /// <summary>
        /// 图像二值化的联高自适应算法
        /// </summary>
        /// <param name="data">灰度化的图片数据</param>
        /// <param name="ratio"></param>
        public static void Automatic_Adaptive_Algorithm(byte[,] data, double ratio = 8.0)
        {
            byte threshold = Adaptive_Threshold(data, ratio);
            Threshold_Algorithm(data, threshold);
        }

        #endregion
        
    }
}

Binarization is important in digital image processing, mainly in computer vision applications. Thresholding is an efficient technique in binarization. The choice of thresholding technique is crucial in binarization. There are various thresholding algorithms have been proposed to define the optimal threshold value.

Binarization can be used in recognising text and symbols, e.g. document processing. Identifying objects with distinctive silhouettes, e.g. components on a conveyor in a manufacturing plant, and determining the orientation of objects are some other examples of binarization applications. Binarization generally involves two steps including the determination of a gray threshold according to some objective criteria and assigning each pixel to one class of background or foreground. If the intensity of the pixel is greater than the determined threshold then it belongs to the foreground class and otherwise to the background. The main problem in binarization is the choice of thresholding technique.
 

 可见 ratio 的取值影响不大,该算法比较实用。

Image Thresholding

Image thresholding is a simple form of image segmentation. It is a way to create a binary image from a grayscale or full-color image. This is typically done in order to separate "object" or foreground pixels from background pixels to aid in image processing.

Thresholding is the simplest method of image segmentation, that replace each pixel in an image with a black pixel, if the image intensity is less than than some fixed constant, or a white pixel if image intensity is greater than the constant.

As the name implies, image thresholding allows us to apply a certain “threshold” to determine whether each pixel is of interest to us or not. Consequently, there are many practical and useful applications of image thresholding. For example we can use this to create a mask in order to isolate certain parts of an image. Alternatively, it can also be a good means to reduce noise within an image. With this in mind, let’s see how to use this in OpenCV.

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

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

相关文章

优思学院|怎么把DPMO/不良率换算成六西格玛水平?

如何计算西格玛水平&#xff1f; 为了更形像化地说明西格玛水平&#xff08;Sigma Level&#xff09;&#xff0c;我们设定一个场景作为例子&#xff0c;假设你是一家电力公司&#xff0c;你会如何评估你公司的质量水平呢&#xff1f;你可能会以电网供电时的正常运行时间来衡量…

知识付费海哥:知识变现三剑客

小时候看武侠戏&#xff0c;那些古代剑客&#xff0c;飞檐走壁&#xff0c;神出鬼没&#xff0c;行走江湖&#xff0c;行侠仗义&#xff0c;牛逼的很&#xff01;心里贼仰慕&#xff01; 记忆最深的&#xff0c;是剑客们稳、准、狠的绝技剑法&#xff0c;剑起头落&#xff0c;一…

python实现字幕雨效果实现

先看最终实现的效果图&#xff1a; 使用python实现以上字幕雨效果&#xff0c;用到的主要库是pygame&#xff1b; pygame不是内置模块&#xff0c;需要先安装一下&#xff1a; 安装pygame 安装方式推荐有很多种&#xff0c;推荐使用pip&#xff1b; pip 是 Python 的包安装程…

RabbitMQ 订阅模型-路由模式

订阅模型-路由模式&#xff0c;此时生产者发送消息时需要指定 RoutingKey&#xff0c;即路由 Key&#xff0c;Exchange 接收到消息时转发到与 RoutingKey 相匹配的队列中。 在 Direct 模型下&#xff1a; 队列与交换机绑定&#xff0c;不能任意绑定&#xff0c;而要指定一个 Ro…

线上贷款申请违约风险预测大数据模型

通过模型可以得出模型分类准确率&#xff0c;通过客户信用违约风险预测模型&#xff0c;可以实现多渠道预警&#xff0c;形成多角度观察、多方面分析、多渠道传递的工作局面。

Python每日一练 10——for循环

Python每日一练 10——for循环 文章目录Python每日一练 10——for循环一、for循环介绍二、实例一&#xff1a;等差数列前n项和三、实例二&#xff1a;计算阶乘四、实例三&#xff1a;拉马努金法计算圆周率五、实例四&#xff1a;百钱买百鸡一、for循环介绍 for循环一般用于循环…

前端_Vue_9.模板引用、组件基础

文章目录一、模板引用1.1. 访问模板引用1.2. v-for 中的模板引用1.3. 函数模板引用1.4. 组件上的 ref1.5. 小结二、组件基础 ⭐2.1. 定义一个组件2.2. 使用组件2.3. 传递props2.4. 监听事件2.5. 通过插槽&#xff08;slot&#xff09;来分配内容2.6. 动态组件2.7. DOM模板解析注…

go 库 Cobra 现代化的命令行框架

go 库 Cobra 现代化的命令行框架 文章目录go 库 Cobra 现代化的命令行框架1. 简介2. 主要功能3. 应用举例4. Cobra 安装5. 使用 Cobra 库创建命令5.1 创建 rootCmd5.2 创建 main.go5.3 添加命令5.4 编译并运行6. 特性6.1 使用标志6.2 非选项参数验证6.3 PreRun and PostRun Hoo…

手绘图说电子元器件-电声转换器件

电声转换器件包括能够将电信号转换为声音的扬声器、耳机、讯响器和蜂鸣器,能够将声音转换为电信号的传声器,能够进行电磁转换的磁头和具有压电效应的晶体等。 扬声器 扬声器俗称喇叭,是一种常用的电声转换器件,其基本作用是将电信号转换为声音,在收音机、录音机、电视机…

Linux | 套接字(socket)编程 | TCP协议讲解 | 通信模型搭建

文章目录TCP模型的特性TCP接口介绍TCP服务器套接字设置TCP客户端套接字设置TCP模型的特性 TCP是属于传输层协议的一种&#xff0c;上篇博客介绍了另一种传输层协议——UDP&#xff0c;关于它们之间的区别&#xff0c;这里再提一下 TCPUDP传输层协议传输层协议有连接无连接可靠…

Word控件Spire.Doc 【评论】教程(3):在C#、VB.NET中从Word文档中提取注释并保存在TXT文件中

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

[Leetcode] 合并两个有序数组、链表

1.合并两个有序数组 原地合并数组&#xff0c;即不使用额外的空间 --> 使用三个指针&#xff0c;从尾部往前处理 题目链接&#xff1a;https://leetcode.cn/problems/merge-sorted-array/ nums1 总长度 mn&#xff0c;自身长度m&#xff1b;nums2 自身长度n&#xff0c; 使…

SSRF渗透与攻防(一)

目录 前言 SSRF是什么 危害&#xff08;利用方式): SSRF漏洞原理&#xff1a; CURL协议&#xff1a; SSRF常见场景 社会化分享功能&#xff1a; 如何发现SSRF漏洞 工具利用&#xff1a; 如何防御SSRF漏洞 前言 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是…

rocketmq 实战问题汇总

rocketmq 实战过程会遇到这样或者那样的问题&#xff0c;今天我们专门抽出一篇文章来分析一下汇总一下&#xff0c;避免以后踩同样的坑&#xff1a; 1、找不到JDK的问题&#xff1a; 综合分析&#xff0c;是因为JDK安装的目录有空格导致的&#xff1a;Program Files 两个单词之…

电子招标采购系统源码—企业战略布局下的采购寻源

​ 智慧寻源 多策略、多场景寻源&#xff0c;多种看板让寻源过程全程可监控&#xff0c;根据不同采购场景&#xff0c;采取不同寻源策略&#xff0c; 实现采购寻源线上化管控&#xff1b;同时支持公域和私域寻源。 询价比价 全程线上询比价&#xff0c;信息公开透明&#xff0…

CANoe—基于DoIP通过CAPL实现与ECU通信测试

如下连接是在CANoe中基于DoIP通过加载诊断数据库实现CANoe与待测ECU诊断通信: CANoe链接 本文继续此话题,通过一个简单的CAPL Demo,实现CANoe与ECU进行DoIP通信。 首先在CANoe新建Ethernet工程: 在CANoe “Simulation Setup”中新建CAPL Test Module: 在此例中采用CANo…

DHCP原理和实验

目录 DHCP基本认识和原理 场景一、同网段DHCP 场景二、不同段DHCP&#xff08;中继DHCP&#xff09; DHCP基本认识和原理 DHCP&#xff08;Dynamic Host Configuration Protocol动态主机协议&#xff09;。 作用&#xff1a;为局域网络中主机动态分发地址&#xff0c;以及…

C#里使用ExcelDataReader读取EXCEL文件的简单方法

C#里使用ExcelDataReader读取EXCEL文件的简单方法 读取EXCEL文件是比较常见的需求,所以在C#里也会经常遇到。 比如客户需要保存的条码数据,他们可以使用EXCEL来扫码进去,并且进行修改和核验, 然后软件就需要读取这些EXCEL文件,并且从这里得到所需要的条码。 要从EXCEL里…

Android 查看隐私权限方法调用者集合

背景 辛辛苦苦迭代完当前版本&#xff0c;准备推送 App 到应用市场上架&#xff0c;却收到拒审通知&#xff1a;App隐私合规上架护航版检测报告&#xff0c; 报告内容&#xff1a; 场景2:APP以隐私政策弹窗的形式向用户明示收集使用规则&#xff0c;未经用户同意&#xff0c;…

页面崩溃了!记录一次测试中出现的前端内存溢出现象

前情回顾 前几天在一次web应用测试过程中&#xff0c;前端发起了向后端接口的查询请求&#xff0c;由于后端响应较慢&#xff0c;前端一直处于等待响应返回状态。在几分钟后&#xff0c;突然页面出现让人惊悚的“噢噢&#xff0c;页面崩溃了”几个大字。 看到这几个字的一瞬间…