Android OpenCV(四十四):图像分割(均值漂移)

MeanShfit 均值漂移算法是一种通用的聚类算法,通常可以实现彩色图像分割。

基本思想为:首先随便选择一个中心点,然后计算该中心点一定范围之内所有点到中心点的距离向量的平均值,计算该平均值得到一个偏移均值,然后将中心点移动到偏移均值位置,通过这种不断重复的移动,可以使中心点逐步逼近到最佳位置。这种思想类似于梯度下降方法,通过不断的往梯度下降的方向移动,可以到达梯度上的局部最优解或全局最优解。

算法原理参考:www.biaodianfu.com/mean-shift.…

Mean Shift

算法过程

API

pyrMeanShiftFiltering函数其实也是一种滤波,只能达到平滑图像的效果,无法直接分割图像。但是平滑后的图像更方便我们进行图像分割。

public static void pyrMeanShiftFiltering(Mat src, Mat dst, double sp, double sr, int maxLevel, TermCriteria termcrit)

  • 参数一:src,输入图像,类型为8位三通道。
  • 参数二:dst,输出图像,与src大小类型相同。
  • 参数三:sp,漂移的物理空间半径大小。
  • 参数四:sr,漂移的颜色空间半径大小。
  • 参数五:maxLevel,用于分割的金字塔的最大级别。
  • 参数六:termcrit,终止标准:何时停止均值漂移迭代。

sp,sr越大,平滑效果越明显,处理时间越长

操作

由于Mean-Shift均值漂移无法直接分割图像,我们配合漫水填充法执行分割操作。

/**

  • Mean-Shift 均值漂移
  • @author yidong
  • @date 11/25/20
    */
    class MeanShiftActivity : AppCompatActivity() {

private val mBinding: ActivityMeanShiftBinding by lazy {
ActivityMeanShiftBinding.inflate(layoutInflater)
}
private lateinit var mRgb: Mat

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(mBinding.root)
mRgb = Mat()
val bgr = Utils.loadResource(this, R.drawable.number)
Imgproc.cvtColor(bgr, mRgb, Imgproc.COLOR_BGR2RGB)
mBinding.ivLena.showMat(mRgb)
mBinding.isLoading = true
GlobalScope.launch(Dispatchers.IO) {
doMeanShift()
}
}

private fun doMeanShift() {
val dst = Mat()
Imgproc.pyrMeanShiftFiltering(mRgb, dst, 40.0, 40.0)

val maskers = Mat(dst.rows() + 2, dst.cols() + 2, CvType.CV_8UC1, Scalar.all(0.0))
Imgproc.floodFill(
dst,
maskers,
Point(7.0, 7.0),
Scalar(65.0, 105.0, 225.0),
Rect(),
Scalar.all(10.0),
Scalar.all(10.0),

面试宝典

面试必问知识点、BATJ历年历年面试真题+解析

学习经验总结

(一)调整好心态
心态是一个人能否成功的关键,如果不调整好自己的心态,是很难静下心来学习的,尤其是现在这么浮躁的社会,大部分的程序员的现状就是三点一线,感觉很累,一些大龄的程序员更多的会感到焦虑,而且随着年龄的增长,这种焦虑感会越来越强烈,那么唯一的解决办法就是调整好自己的心态,要做到自信、年轻、勤奋。这样的调整,一方面对自己学习有帮助,另一方面让自己应对面试更从容,更顺利。

(二)时间挤一挤,制定好计划
一旦下定决心要提升自己,那么再忙的情况下也要每天挤一挤时间,切记不可“两天打渔三天晒网”。另外,制定好学习计划也是很有必要的,有逻辑有条理的复习,先查漏补缺,然后再系统复习,这样才能够做到事半功倍,效果才会立竿见影。

(三)不断学习技术知识,更新自己的知识储备
对于一名程序员来说,技术知识方面是非常重要的,可以说是重中之重。**要面试大厂,自己的知识储备一定要非常丰富,若缺胳膊少腿,别说在实际工作当中,光是面试这一关就过不了。**对于技术方面,首先基础知识一定要扎实,包括自己方向的语言基础、计算机基础、算法以及编程等等。

参考docs.qq.com/doc/DSkNLaERkbnFoS0ZF
过不了。**对于技术方面,首先基础知识一定要扎实,包括自己方向的语言基础、计算机基础、算法以及编程等等。

参考docs.qq.com/doc/DSkNLaERkbnFoS0ZF

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值