C#,图像二值化(16)——全局阈值的力矩保持算法(Moment-proserving Thresholding)及其源代码

news2025/1/13 13:18:47

1、力矩保持法

提出了一种基于矩保持原理的自动阈值选择方法。以这样的方式确定地计算阈值,即在输出画面中保留输入画面的时刻。实验结果表明,该方法可以将给定的图像阈值化为有意义的灰度级。该方法描述了全局阈值,但也适用于局部阈值。

A new approach to automatic threshold selection using the moment-preserving principle is proposed. The threshold values are computed deterministically in such a way that the moments of an input picture is preserved in the output picture. Experimental results show that the approach can be employed to threshold a given picture into meaningful gray-level classes. The approach is described for global thresholding, but it is applicable to local thresholding as well.

在许多图像分析应用中,图像阈值处理是必要的步骤。对于阈值技术综述,见[1或21。在最简单的形式中,阈值将给定图像的像素分类为两组的装置(例如背景),其中包括灰度值高于一定值的像素另一个包括灰度值等于或低于门槛这被称为双燃料阈值。一般来说,我们可以选择一个阈值,并使用它们将整个灰度值范围划分为几个子范围。这被称为多级阈值。大多数阈值技术[3-S]在阈值选择中利用图像直方图的形状信息。在理想在这种情况下,具有高对比度对象和背景的图像的直方图将具有双峰形状,两个峰被深谷隔开。可以选择谷作为阈值。在实际应用中,这种直方图双峰性通常是不清楚的,已经提出了几种方法克服这一问题问题[4-81,以便仍然可以应用山谷搜索技术。阈值选择的另一个方向是评估所选的阈值(通过某种度量)[9-131。一种方法是使用熵信息测量阈值类的同质性(9-111或这些类彼此不同[12]。另一种方法是利用课堂判别分析中使用的可分性度量[13]。在本文中,我们提出了另一种基于矩保持原理也已应用于亚像素边缘检测[14]. 具体而言,在阈值化之前,我们计算输入图像。然后以如下方式选择阈值:阈值图像保持不变。这种方法可视为保矩图像变换,其从模糊版本。该方法可以自动且确定地选择多个阈值,而无需迭代或搜索。此外,代表性灰度值也可以针对每个阈值类获得。

Image thresholding is a necessary step in many image analysis applications. For a 
survey of thresholding techniques, see [l or 21. In its simplest form, thresholding 
means to classify the pixels of a given image into two groups (e.g., objects and 
background), one including those pixels with their gray values above a certain 
threshold, and the other including those with gray values equal to and below the 
threshold. This is called bileuel thresholding. More generally, we can select more than 
one threshold, and use them to divide the whole range of gray values into several 
subranges. This is called multilevel thresholding. Most thresholding techniques [3-S] 
utilize shape information of the image histogram in threshold selection. In the ideal 
case, the histogram of an image with high-contrast objects and background will have 
a bimodal shape, with two peaks separated by a deep valley. The gray value at the 
valley can be chosen as the threshold. In real applications, such histogram bimodality is often unclear, and several methods have been proposed to overcome this 
problem [4-81 so that the valley seeking technique can still be applied. 
Another direction of threshold selection is to evaluate the goodness of selected 
thresholds by a certain measure [9-131. One way is to use entropy information to 
measure the homogeneity of the thresholded classes (9-111 or the independency of 
the classes from one another [12]. Another way is to make use of the class 
separability measures used in discriminant analysis [13]. 
In this paper, we propose another threshold selection method based on the 
moment-preserving principle which has also been applied to subpixel edge detection 
[14]. Specifically, before thresholding, we compute the gray-level moments of the 
input image. The thresholds are then selected in such a way that the moments of the 
thresholded image are kept unchanged. This approach may be regarded as a 
moment-preserving image transformation which recovers an ideal image from a 
blurred version. The approach can automatically and deterministically select multiple thresholds without iteration or search. In addition, a representative gray value 
can also be obtained for each thresholded class. 

 

 NOTE Moment-Preserving Thresholding: A New Approachhttps://people.cs.nctu.edu.tw/~whtsai/Journal%20Paper%20PDFs/Tsai_CVGIP(journal)_1985.pdf

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 byte Moment_Preserving_Threshold(int[] histogram)
        {
            int amount = Histogram_Sum(histogram);

            double[] Avec = new double[256];
            for (int i = 0; i < 256; i++)
            {
                Avec[i] = (double)A(histogram, i) / (double)amount;
            }

            double X2 = (double)(B(histogram) * C(histogram) - A(histogram) * D(histogram)) / (double)(A(histogram) * C(histogram) - B(histogram) * B(histogram));
            double X1 = (double)(B(histogram) * D(histogram) - C(histogram) * C(histogram)) / (double)(A(histogram) * C(histogram) - B(histogram) * B(histogram));
            double X0 = 0.5 - (B(histogram) / A(histogram) + X2 / 2) / Math.Sqrt(X2 * X2 - 4 * X1);

            int Index = 0;
            double Min = double.MaxValue;
            for (int i = 0; i < 256; i++)
            {
                if (Math.Abs(Avec[i] - X0) < Min)
                {
                    Min = Math.Abs(Avec[i] - X0);
                    Index = i;
                }
            }
            return (byte)Index;
        }


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

        private static double A(int[] histogram, int Index = 255)
        {
            return Histogram_Sum(histogram, 0, Index);
        }

        private static double B(int[] histogram, int Index = 255)
        {
            return Histogram_Sum(histogram, 1, Index);
        }

        private static double C(int[] histogram, int Index = 255)
        {
            return Histogram_Sum(histogram, 2, Index);
        }

        private static double D(int[] histogram, int Index = 255)
        {
            return Histogram_Sum(histogram, 3, Index);
        }

        #endregion
    }
}
 

3、力矩保持法的阈值算法计算效果

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

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

相关文章

企业微信开发——企业内部自建应用开发(第二篇)---JS_SDK配置

企业微信如果想要使用企业微信的JS_SDK来实现拍照、定位等等功能&#xff0c;就需要预先在使用到的页面进行配置&#xff0c;当然你可以做全局配置。对于JS_SDK的配置设计前端和后端的统一配置。下面我来说明下具体的步骤。特别说明&#xff1a;1、企业微信有的接口需要配置wx.…

shader基础入门(1)

本文基于unity免费公开课“Hi Shader以及网络公开资料等书写”遵循开源协议。 MeshFilter网格过滤器 从海量资源中挑选适合的Mesh将他交给MeshRender MeshRenderer 网格渲染器 负责把MeshFilter丢过来的Mesh&#xff0c;绘制显示到我们的场景中 Material 材质球 Material…

多线程之死锁

目录&#xff1a; 1.什么是死锁&#xff1f; 2.可重入与不可重入 3.发生死锁的三个典型情况 4.发生死锁的四个必要条件 5.如何破除死锁&#xff1f; 1.什么是死锁&#xff1f; 谈到死锁&#xff0c;程序猿们都心存忌惮&#xff0c;因为程序一旦出现死锁&#xff0c;就会导…

深度学习训练营之鸟类识别

深度学习训练营之鸟类识别原文链接环境介绍前置工作设置GPU导入数据并进行查找数据处理可视化数据配置数据集残差网络的介绍构建残差网络模型训练开始编译结果可视化训练样本和测试样本预测原文链接 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&am…

机器学习:如何解决类别不平衡问题

类别不平衡是一个常见问题&#xff0c;其中数据集中示例的分布是倾斜的或有偏差的。 1. 简介 类别不平衡是机器学习中的一个常见问题&#xff0c;尤其是在二元分类领域。当训练数据集的类分布不均时会发生这种情况&#xff0c;从而导致训练模型存在潜在偏差。不平衡分类问题的示…

【Unity云消散】理论基础:实现SDF的8SSEDT算法

距离元旦假期已经过去5天了&#xff08;从31号算起&#xff01;&#xff09;&#xff0c;接着开始学习&#xff01; 游戏中的很多渲染效果都离不开SDF&#xff0c;那么SDF究竟是什么呢&#xff1f;到底是个怎么样的技术&#xff1f;为什么能解决那么多问题&#xff1f; 1 SD…

git介绍及环境搭建

git介绍及环境搭建Git介绍Git安装流程配置用户信息git工作流程与常用命令问题点总结主要工作流程git工作流程与原理总结Git介绍 1.Git是什么&#xff1f; Git版本控制系统是一个分布式的系统,是用来保存工程源代码历史状态(游戏存档)的命令行工具 GIT是一个命令行工具,用于版…

基于Java+Spring+vue+element社区疫情服务平台设计和实现

基于JavaSpringvueelement社区疫情服务平台设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源…

Django+channels -> websocket

Django+channels -> websocket 学习视频: https://www.bilibili.com/video/BV1J44y1p7NX/?p=10 workon # 查看虚拟环境 mkvirtualenv web -p python3.10 # 创建虚拟环境 workon web # 进入虚拟环境pip insatll django channelsdjango-admin startproject ws_demo python …

【NI Multisim 14.0原理图环境设置——元器件库管理】

目录 序言 一、元器件库管理 &#x1f349;1.“元器件”工具栏 &#x1f34a;&#xff08;1&#xff09;电源/信号源库 &#x1f34a;&#xff08;2&#xff09;基本器件库 &#x1f34a;&#xff08;3&#xff09;二极管库 &#x1f34a;&#xff08;4&#xff09;晶体管…

seL4 背景知识

1 seL4 演变 1.1 微内核 微内核发展到目前为止经历了三代, 这里做一些归纳。参考《现代操作系统: 原理与实现》中操作系统结构一章, 关于微内核架构发展的介绍。 第一代微内核设计将许多内核态功能放到用户态, Mach 微内核是第一代微内核的代表。第二代微内核设计将对 IPC 优…

C++学习记录——일 C++入门(1)

C入门&#xff08;1&#xff09; 文章目录C入门&#xff08;1&#xff09;一、C关键字二、C第一个程序三、命名空间1、域作用限定符2、了解命名空间3、命名空间的使用四、C输入输出五、缺省参数六、函数重载七、引用1、引用符号2、引用的部分使用场景一、C关键字 关键字有98个&…

filebeat采集nginx日志

背景我们公司项目组用的是elastic的一整套技术栈&#xff0c;es&#xff0c;kibana&#xff0c;filebeat和apm&#xff0c;目前已经可以采集网关各个微服务的日志。架构图现在需要在原来的基础上把nginx这的日志也采集上来&#xff0c;方便做链路跟踪问题与思路原先traceId是在…

数字经济时代,“8K+”开拓行业新格局

2023深圳国际8K超高清视频产业发展大会召开&#xff0c;大会以“超清互联 数智创新”为主题&#xff0c;汇聚两院院士、产业领袖、领军企业共同深入探讨超高清产业发展现状、关键问题和未来趋势&#xff0c;并集中发布《深圳市超高清视频显示产业白皮书&#xff08;2023版&…

「数据密集型系统搭建」开卷篇|什么是数据密集型系统

在我们开发的诸多系统&#xff0c;基本都可以视为“数据密集型系统”&#xff0c;数据是一切物质的载体&#xff0c;我们依靠数据做存储记录&#xff0c;通过数据进行信息传递交换&#xff0c;最终还要数据来呈现和展示等&#xff0c;从一定视角而言&#xff0c;系统中最核心、…

临时用网搞不定?别着急,5G网络“急救车”来啦

如何在1天时间内&#xff0c;用不超过5名装维人员&#xff0c;完成超过200间宿舍的网络覆盖&#xff0c;让即将踏上考场的高三学子们尽快用上网络&#xff1f; 近期&#xff0c;这个问题一直困扰着重庆电信客户经理周睿。原来&#xff0c;由于疫情原因&#xff0c;重庆市某中学…

WINDOWS安装Oracle11.2.0.4

(一)Oracle服务器端安装 1.运行Oracle11g服务器端安装程序setup.exe,弹出如下界面&#xff1a; 2.如上界面中&#xff0c;把默认打上的勾去掉&#xff0c;然后点击【下一步】&#xff0c;弹出如下界面&#xff1a; 3.如上界面中&#xff0c;选择跳过软件更新,然后点击【下一步…

指针进阶(三)再谈数组与串函数

&#x1f31e;欢迎来到C语言的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f320;本阶段属于练气阶段&#xff0c;希望各位仙友顺利完成…

【阶段二】Python数据分析数据可视化工具使用01篇:数据可视化工具介绍、数据可视化工具安装、折线图与柱形图

本篇的思维导图: 数据可视化工具介绍 Matplotlib是最著名的绘图库,主要用于二维绘图,当然也可以进行简单的三维绘图。它提供了一整套丰富的命令,让我们可以非常快捷地用Python可视化数据,而且允许输出达到出版质量的多种图像格式。 Seaborn是在matplo…

国内电容市场份额达七成,松下如何抢占高地?

01 电容市场发展 电容器是三大电子被动元器件之一&#xff0c;是电子线路中不可缺少的基础元件&#xff0c;约占全部电子元件用量的40%&#xff0c;产值的66%。中国电容器行业规模增速持续高于全球规模增速&#xff0c;中国市场的快速增长成为拉动全球电容器行业规模增长的主要…