# 图像分割的一些简单实现

1．  双峰法

//intPeakintPeak2intValley：峰值和直方图值

//intIndx:：相应的灰度值

intPeak,intIndx,intPeak2,intIndx2,intValley,intValleyIndx:integer;

//初始双峰值

intPeak:=0;

intPeak2:=0;

//取得第一峰值

for intLoop:=0 to 255 do

if intPeak<=intGrayLevel[intLoop] then

begin

intPeak:=intGrayLevel[intLoop];

intIndx:=intLoop;

end;

//取得第二峰值

for intLoop:=0 to 255 do

Begin

if (intPeak2<=intGrayLevel[intLoop]) and (intLoop<>intIndx) then

begin

intPeak2:=intGrayLevel[intLoop];

intIndx2:=intLoop;

end

end;

//取得双峰之间的谷值

intValley:=intSize;

if intIndx2<intIndx then

for intLoop:=intIndx2 to intIndx do

if intValley>intGrayLevel[intLoop] then

begin

intValley:=intGrayLevel[intLoop];

intValleyIndx:=intLoop;

end;

2．  迭代法

1．  求出图象的最大灰度值和最小灰度值，分别记为ZMAXZMIN，令初始阈值T0=(ZMAX+ZMIN)/2

2．  根据阈值TK将图象分割为前景和背景，分别求出两者的平均灰度值ZOZB

3．  求出新阈值TK+1=(ZO+ZB)/2

4．  TK=TK+1，则所得即为阈值；否则转2，迭代计算。

//阈值初始为0

intThresholdVal:=0;

intThresholdVal2:=0;

//总灰度值

intTotalGrayLevel:=0;

for intLoop:=0 to 255 do

if intGrayLevel[intLoop]<>0 then

intTotalGrayLevel:=intTotalGrayLevel+intLoop*intGrayLevel[intLoop];

//求出初始最大灰度值

for intLoop:=0 to 255 do

if intGrayLevel[intLoop]>0 then

begin

intLGrayLevel:=intLoop;

intThresholdVal:=intLoop;

break;

end;

//求出初始最小灰度值和初始阈值

for intLoop:=255 downto 0 do

if intGrayLevel[intLoop]>0 then

begin

intRGrayLevel:=intLoop;

intThresholdVal:=(intThresholdVal+intLoop)div 2;

break;

end;

//迭代求解

while intThresholdVal<>intThresholdVal2 do

begin

intThresholdVal2:=intThresholdVal;

intCount:=0;

intLGrayLevel:=0;

for intLoop:=0 to intThresholdVal do

if intGrayLevel[intLoop]<>0 then

begin

intCount:=intCount+intGrayLevel[intLoop];

intLGrayLevel:=intLGrayLevel+intLoop*intGrayLevel[intLoop];

end;

intRGrayLevel:=intTotalGrayLevel-intLGrayLevel;

intLGrayLevel:=intLGrayLevel div intCount;

intRGrayLevel:=intRGrayLevel div (intSize-intCount);

intThresholdVal:=(intLGrayLevel+intRGrayLevel)div 2;

end;

3．  大津法（OTSU法）

//遍历所有灰度值求Max g

for intCurrentLevel:=0 to intArrLen do

begin

if intSclGrayLevel[intCurrentLevel]=0 then

continue

else

begin

//计算当阈值为intCurrentLevel时的g

intCount:=0;

intSumPels:=0;

for intLoop:=0 to intCurrentLevel do

begin

intCount:=intCount+intSclGrayLevel[intLoop];

intSumPels:=intSumPels+intSumPelsArr[intLoop];

end;

w0:=intCount/intSize;

u0:=intSumPels/intCount;

w1:=1-w0;

if intSize-intCount<>0 then

u1:=(intTotalPels-intSumPels)/(intSize-intCount)

else

u1:=0;

RlTempO:=w0*w1*(u0-u1)*(u0-u1);

if RlTempO>RlMaxO then

begin

RlMaxO:=RlTempO;

Result:=intCurrentLevel;

end;

end;

4．  灰度拉伸－一种改进的大津法

5．  Kirsh算子

【1】       崔屹，数字图像处理技术与应用，电子工业出版社，1997

【2】       付忠良，图像阈值选取方法，计算机应用，2000

【3】       吴冰、秦志远，自动确定图像二值化最佳阈值的新方法，绘测学院学报，2000

【4】       曹莉华，图像边缘提取中的一种动态阈值获取法，小型微型计算机系统，1997

【5】       付忠良，基于图像差距度量的阈值选取方法，计算机研究与发展，2001

【6】       付忠良，一些新的图像阈值选取方法，计算机应用，2001

【7】       Kenneth.R.Castleman著，朱志刚等译，数字图像处理，电子工业出版社，1998

• 本文已收录于以下专栏：

## 图像分割的一些简单实现

• dmgf
• 2003年03月31日 09:31
• 2020

## 基于图像分割的立体匹配方法

1.绪论立体匹配是三维重建系统的关键步骤，并且作为一种非接触测量方法在工业以及科研领域具有重要的应用价值。为了完成匹配工作以及获取场景的稠密视差图，可以通过构建能量函数对应立体匹配的约束条件。复杂能量...
• wangyaninglm
• 2016年07月12日 20:58
• 6853

## 对主流的图像分割算法进行比较，并对其部分算法进行优化

• huohunri2013
• 2012年09月10日 23:17
• 1103

## 基于K-means聚类的图像分割

K-means算法用于聚类分析，广泛用于机器学习领域。 下面借用百度百科的解释，个人觉得讲的还算清楚： k-means 算法接受参数 k ；然后将事先输入的n个数据对象划分为 k个聚类以便使得所获得...
• u014568921
• 2014年12月11日 15:21
• 8385

## 十分钟看懂图像语义分割技术

• u012150360
• 2017年04月26日 11:58
• 1392

## 区域分割算法

• jiakeyouwe
• 2016年08月07日 10:45
• 411

## 图像分割（一）——原理概念

• u010368556
• 2017年04月14日 19:25
• 1495

## 图像语义分割（1）- FCN

• zizi7
• 2017年08月11日 15:12
• 934

## 图像分割阈值选取技术综述

• qq_26898461
• 2015年08月28日 11:41
• 8726

## 4k图像分割技术

• a52228254
• 2017年08月26日 21:59
• 170

举报原因： 您举报文章：图像分割的一些简单实现 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)