halcon中阈值分割算子用法

article/2025/11/6 22:35:34

1.threshold(Image : Region : MinGray, MaxGray : ):通过给定的阈值区间对图像进行分割

效果图:

                                                       

read_image (Audi2, 'audi2')
fill_interlace (Audi2, ImageFilled, 'odd')
threshold (ImageFilled, Region, 0, 90)

 

2.binary_threshold(Image : Region : Method, LightDark : UsedThreshold):自动阈值分割,可以自动选择出'light' 区域或'dark' 区域,使用自动确定的全局阈值分割单通道图像,使用阈值方法Method有'max_separability' 和'smooth_histo'两个值,这两个值都是只应用在具有双峰直方图的图像(bin_threshold是过去时,新的应用程序应该使用binary_threshold)

                                                               

reduce_domain (Image, RegionROI, ImageReduced)
binary_threshold (ImageReduced, RegionBackground, 'max_separability', 'dark', UsedThreshold)

3.dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : ):使用局部阈值分割图像,首先需要对图像进行平滑处理(例如 mean_image, binomial_filter, gauss_filter等等),然后用原图与平滑后的图逐个像素作比较,可以根据参数分割出原图比平滑后的图灰度高(或者低)Offset个灰度值的区域。(Offset的值最好是在5到40之间)

                     

read_image (Image, 'surface_scratch')
mean_image (Image, ImageMean, 7, 7)
dyn_threshold (Image, ImageMean, DarkPixels, 5, 'dark')

4.dual_threshold(Image : RegionCrossings : MinSize, MinGray, Threshold : ):阈值分割有正负之分的图像,将输入图像中灰度值>= Threshold的分为“positive”区域,将灰度值 <= -Threshold的分为“negative”区域,只有当“positive”或“negative”区域的面积大于MinSize的区域才会考虑,区域的最大灰度值 < MinGray时,该区域被抑制。 “positive” 和“negative”区域不一定覆盖整个区域,灰度值在-Threshold 与Threshold和-MinGray 与 MinGray之间是不被考虑的。

     

read_image (Traffic1, 'traffic1')
read_image (Traffic2, 'traffic2')
convert_image_type (Traffic1, ImageConverted1, 'int2')
convert_image_type (Traffic2, ImageConverted2, 'int2')
* Subtract two images.
sub_image (ImageConverted1, ImageConverted2, ImageSub, 1, 0)
dual_threshold (ImageSub, RegionDiff, 500, 20, 10)

5.auto_threshold(Image : Regions : Sigma : ):使用从直方图确定的阈值分割图像,算法过程:1.获取输入图像的灰度直方。

使用标准差为Sigma 的一维高斯滤波器对直方图进行滤波。3.计算滤波后的直方图的极小值。4.以计算得到的极小值所对应的灰度值为分割阈值对图像进行分割。

      

read_image (Aegypt1, 'egypt1')
get_image_size (Aegypt1, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowID)
set_display_font (WindowID, 14, 'mono', 'true', 'false')
dev_set_colored (6)
dev_clear_window ()
Sigma := 4
auto_threshold (Aegypt1, Regions, Sigma)

6.char_threshold(Image, HistoRegion : Characters : Sigma, Percent : Threshold):为提取字符执行阈值分割。主要应用是在明亮的纸张上分割单通道的暗字符图像。该算子工作如下:1.首先,对Image图像的HistoRegion 内的点计算灰度直方图,用给定的Sigma高斯平滑对直方图进行平滑处理,减少噪音。在直方图中,背景(白纸)在高灰度值处对应一个大的峰值,而字符在低灰度值处形成一个小的峰值。与操作符binary_threshold (with 'Method'='smooth_histo')定位两个峰值之间的最小值不同,这里分割的阈值是根据直方图的最大值确定的,即,背景,条件如下:

histogram[threshold] * 100.0 < histogram[maximum] * (100.0 - Percent)

                     

read_image (Alpha1, 'alpha1')
get_image_size (Alpha1, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_display (Alpha1)
dev_set_color ('white')
dev_clear_window ()
char_threshold (Alpha1, Alpha1, Characters, 6, 95, Threshold)

7.fast_threshold(Image : Region : MinGray, MaxGray, MinSize : ):利用全局阈值快速阈值化图像,从输入图像中选取灰度值g满足一下条件的像素MinGray < g < MaxGray。该算子工作如下:首先,处理位于选定的水平线上的所有点,这些点有它们的距离MinSize 指定,然后,处理所有先前选择的点的邻域(size(2*MinSize + 1)*(2*MinSize + 1)),速度比threshold快

                                                             

read_image (Image, 'particle')
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowID)
dev_display (Image)
dev_set_color ('red')
dev_set_draw ('fill')
dev_update_var ('off')
dev_update_window ('off')
dev_update_pc ('off')
count_seconds (Seconds1)
fast_threshold (Image, Region, 128, 255, 10)

8.hysteresis_threshold(Image : RegionHysteresis : Low, High, MaxLength : ):对图像执行滞后阈值操作,输入图像中灰度值大于或等于Hight的所有点立即被接受(“secure” 安全点),相反,所有灰度值小于Low的点会立即被拒绝。如果某个点(灰度值在Low与High之间)连接到“secure”点的距离长度不超过MaxLength,则该点为两个阈值之间的灰度值的 “Potential” 潜在点,这意味着安全点影响它们的环境(滞后)

                                                              

decompose3 (ImageReduced, ImageR, ImageG, ImageB)
invert_image (ImageB, ImageInvert)
hysteresis_threshold (ImageInvert, RegionHysteresis2, 190, 200, 5)

9.local_threshold(Image : Region : Method, LightDark, GenParamName, GenParamValue : ):使用局部阈值分割图像。使用method中给出的阈值方法分割单通道图像,目前该算子只提供'adapted_std_deviation'方法,该算法是一种文本二值化技术。 Method = 'adapted_std_deviation',根据Sauvola调用基于局部均值和标准偏差的局部自适应阈值。该算法能够对文档图像进行分割,即使图像质量下降,例如由于不均匀的光照或噪声,它通过考虑局部对比度来实现非均匀背景下的文本二值化。

                                                                 

read_image (Letters, 'letters')
dev_open_window_fit_image (Letters, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
get_image_size (Letters, Width, Height)
gen_image_surface_first_order (ImageSurface, 'byte', 0.5, 0.5, 0.5, Width / 2, Height / 2, Width, Height)
add_image (Letters, ImageSurface, ImageCombined, 0.5, 0)
local_threshold (ImageCombined, Region, 'adapted_std_deviation', 'dark', [], [])

10.watersheds_threshold(Image : Basins : Threshold : ):使用阈值从图像中提取流域盆地。流域之间由一个高度至少为Threshold的分水岭间隔。在第一步中,watersheds_threshold计算流域而不应用阈值,得到的流域与调用流域是得到的流域相同。在第二步中,如果流域被一个小于Threshold的分水岭分隔开,则流域依次合并。

           

read_image (ImageLogo, 'mvtec_logo.png')
dev_close_window ()
get_image_size (ImageLogo, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (ImageLogo)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
gauss_filter (ImageLogo, ImageGauss, 9)
sobel_amp (ImageGauss, EdgeAmplitude, 'sum_abs', 3)
watersheds (EdgeAmplitude, Basins1, Watersheds)
dev_display (Basins1)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
watersheds_threshold (EdgeAmplitude, Basins2, 14)

 

参考文章:https://blog.csdn.net/qq_29187197/article/details/82780566


http://chatgpt.dhexx.cn/article/tx6njy5R.shtml

相关文章

De-interlace 反交错 简介

<script type"text/javascript"> </script> <script type"text/javascript"> </script> 为了更好的理解新的逐行扫瞄的概念&#xff0c;必须先弄清楚电视传输的一些基本知识&#xff0c;一副图像是如何传输的&#xff0c;它与新的…

pygame加载png出现known incorrect sRGB,Interlace handling should be turned on when using png_read_image问题

使用pygame加载png出现libpng warning: iCCP: known incorrect sRGB profile和Interlace handling should be turned on when using png_read_image警告的问题 一、解决Interlace handling should be turned on when using png_read_image警告 最近使用Python实现强化学习走迷…

计算机视觉之旅(Day3)

对不起大家&#xff0c;opencv的坑我尽量在年底更完&#xff0c;C的坑已经基本更完了&#xff0c;在没有进一步深入学习C之前可能这个系列已经算完了。不多说&#xff0c;我看看机器视觉的基本内容吧。 &#xff08;一&#xff09;基本构成 传统的机器视觉系统是由待测目标、…

交错(拉丝)(Interlace) 与 反胶卷过带

第一部分——交错&#xff08;拉丝&#xff09;&#xff08;Interlace&#xff09;的产生 引用了相当多网友的分析与结论&#xff0c;恕我不能依次注明。分析主要来自“[SilkyBible] 视频知识系列”&#xff0c;就主要概念的主要影响因素进行了一点分析。如果有错误&#xff0c…

二分法之最大子段和

1.问题描述&#xff1a;给定一个数组&#xff0c;找出其中可以构成最大数的子段&#xff0c;子段和是由连续的子段构成的&#xff1b;给定有n个整数(可能为负整数)组成的序列a1,a2,...,an,求该序列连续的子段和的最大值。 2.设计思路&#xff1a;对于一个连续的子段和&#xf…

java动态规划求最大子段和_动态规划-最大子段和

2018-01-14 21:14:58 一、最大子段和问题 问题描述&#xff1a;给定n个整数(可能有负数)组成的序列a1&#xff0c;a2&#xff0c;...&#xff0c;an&#xff0c;求该序列的最大子段和。如果所有整数都是负数&#xff0c;那么定义其最大子段和为0。 方法一、最大子段和的简单算法…

四种方法求解最大子段和问题

题目描述 给定一段长度为n的序列&#xff0c;我们需要找到其中一个连续的子段&#xff0c;使这个子段中各个元素加和最大&#xff0c;如果这个数组中全为负整数&#xff0c;我们就定义这个子段和为0. 题目分析 首先我们的目的是找一个局部的子段但加和是全局最大&#xff0c;…

最大子段和问题(分治法和动态规划)

什么是最大子段和&#xff0c;通俗点讲&#xff1a; 最大子段和就是给了一些数&#xff0c;然后你从中找了几个连续的数&#xff0c;这组连续的数的和比任意一组连续的数的和都大&#xff0c;那么你找的这几个连续的数的和就是这些数的最大子段和。 通俗的听不懂你就看这里&am…

最大子段求和

3种算法&#xff1a;最大子段求和 一、问题分析 问题&#xff1a;给定有n个整数(可能为负整数)组成的序列 a 1 , a 2 , . . . , a n , a_1,a_2,...,a_n, a1​,a2​,...,an​,求该序列连续的子段和的最大值。 如果该子段的所有元素和是负整数时定义其最大子段和为0。 简易算法…

最大子段和问题(3种方法)

给定由n个整数(可能为负整数)组成的序列a1&#xff0c;a2&#xff0c; a3… &#xff0c; an&#xff0c; 寻找它的某个连续子段&#xff0c;使得其和最大。例如( -2,11,-4,13,-5,-2 )最大子段是{ 11,-4,13 }其和为20。 1、最大字段和问题的简单算法 (1)枚举法求解&#xff1…

最大子段和(动态规划算法)

最大子段和&#xff08;动态规划算法&#xff09; 文章目录 最大子段和&#xff08;动态规划算法&#xff09;一、思路二、伪代码三、C代码四、输入实例 一、思路 D[i]表示从i开始的最大字段和。&#xff08;但我们不是从前往后找字段结束位置&#xff09; 根据递推公式&#x…

最大子段和——用蛮力算法,分治策略,动态规划算法三种求法(C语言)

目录 一、题目 二、算法求解 1、蛮力算法 伪代码 算法分析 程序 2、分治策略 伪代码 算法分析 程序 3、动态规划算法 伪代码 算法分析 程序 一、题目 设A<a1,a2,...,an>是n个整数的序列&#xff0c;称<ai,....,aj>为该序列的连续子序列&#xff0c;其…

归并排序 java实现_java实现归并排序

归并排序 归并排序&#xff0c;指的是将两个已经排序的序列合并成一个序列的操作。 归并操作的过程如下&#xff1a; 申请空间&#xff0c;使其大小为两个已经排序序列之和&#xff0c;该空间用来存放合并后的序列 设定两个指针&#xff0c;最初位置分别为两个已经排序序列的起…

Java八大算法:归并排序

一、什么是归并排序&#xff1f; 1.概念 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法&#xff0c;归并排序对序列的元素进行逐层折半分组&#xff0c;然后从最小分组开始比较排序&#xff0c;合并成一个大的分组&#xff0c;逐层进行…

归并排序(Java代码实现)

基本思想&#xff1a; 将两个或两个以上的有序表合并成一个有序表的过程。常用的归并为2-路归并&#xff0c;就是将两个有序表合为一个有序表。 过程&#xff1a; 先来看一张示意图&#xff1a; 可以看出&#xff0c;归并排序分为分解和合并两个步骤。 分解就是将原数组分解…

归并排序(Java实现)

归并排序&#xff08;Merge Sort&#xff09;是建立在归并操作上的一种有效&#xff0c;稳定的排序算法&#xff0c;该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先…

归并排序java详解

import java.util.Arrays;public class Mergesort {public static void main(String[] args) {int arr[]{8,4,5,7,1,3,6,2};int temp[]new int[arr.length];//归并排序需要一个额外空间mergeSort(arr,0,arr.length-1,temp);System.out.println("归并排序后" Arrays.t…

java归并排序(含归并排序代码)

目录 一&#xff1a;归并排序的思想 二&#xff1a;归并排序代码 三&#xff1a;归并排序结果​ 一&#xff1a;归并排序的思想 归并排序&#xff08;Merge Sort&#xff09; 当我们要排序这样一个数组的时候&#xff0c;归并排序法首先将这个数组分成一半。如图&#xff1a…

归并排序java代码实现

归并排序,是一种分治算法。利用递归&#xff0c;将一个大的数据集合分解成小的子集合。将子集合排好序后&#xff0c;再合并起来。归并排序不是原地排序算法,因为它使用到了临时空间&#xff0c;这也是归并排序没有快速排序应用广泛的主要原因&#xff0c;虽然归并排序的时间复…

分治算法实现经典归并排序java实现

目录 1.什么是分治算法 分治法 基本思想 2.分治算法的体现:归并排序 归并排序 基本思想 3.代码实现 1.什么是分治算法 分治法 分治法&#xff0c;字面意思是“分而治之”&#xff0c;就是把一个复杂的1问题分成两个或多个相同或相似的子问题&#xff0c;再把子问题分成…