Android OpenCV(十七):高斯噪声

高斯噪声

高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。常见的高斯噪声包括起伏噪声、宇宙噪声、热噪声和散粒噪声等等。这类噪声主要来源于电子电路噪声和低照明度或高温带来的传感器噪声,也成为正态噪声,是在实践中经常用到的噪声模型。

区别于椒盐噪声随机出现在图像中的任意位置,高斯噪声出现在图像中的所有位置。且概率密度函数如下所示:
p ( z ) = 1 2 π δ e − ( z − μ ) 2 δ 2 p(z) = {1\over \sqrt{2\pi}\delta}e^{-(z-\mu)\over 2\delta^2} p(z)=2π δ1e2δ2(zμ)
其中z表示图像像素灰度值,μ表示像素值的平均值或期望值,σ表示像素值的标准差。标准差的平方σ2称为方差。

μ是正态分布的位置参数,描述正态分布的集中趋势位置。概率规律为取与μ邻近的值的概率大,而取离μ越远的值的概率越小。正态分布以X=μ为对称轴,左右完全对称。正态分布的期望、均数、中位数、众数相同,均等于μ。
σ描述正态分布资料数据分布的离散程度,σ越大,数据分布越分散,σ越小,数据分布越集中。也称为是正态分布的形状参数,σ越大,曲线越扁平,反之,σ越小,曲线越瘦高

API

目前为止OpenCV 4中没有提供专门用于为图像添加高斯噪声的函数。步骤如下图:

生成步骤

操作

/**
 * 高斯噪声
 * author: yidong
 * 2020/4/4
 */
class GaussianNoiseActivity : AppCompatActivity() {

    private lateinit var mBinding: ActivityGaussianNoiseBinding
    private lateinit var mRgb: Mat

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mBinding = DataBindingUtil.setContentView(this, R.layout.activity_gaussian_noise)

        val bgr = Utils.loadResource(this, R.drawable.lena)
        mRgb = Mat()
        Imgproc.cvtColor(bgr, mRgb, Imgproc.COLOR_BGR2RGB)
        showMat(mBinding.ivLena, mRgb)
        buildGaussian()

    }


    private fun buildGaussian() {
        val noise = Mat(mRgb.size(), mRgb.type())
        val result = Mat()
        val mean = MatOfDouble()
        val dev = MatOfDouble()

        Core.meanStdDev(mRgb, mean, dev)

        Core.randn(noise, mean[0, 0][0], dev[0, 0][0])
        showMat(mBinding.ivGaussian, noise)
        Core.add(mRgb, noise, result)
        showMat(mBinding.ivResult, result)

        noise.release()
        result.release()
    }

    override fun onDestroy() {
        mRgb.release()
        super.onDestroy()
    }

    private fun showMat(view: ImageView, source: Mat) {
        val bitmap = Bitmap.createBitmap(source.width(), source.height(), Bitmap.Config.ARGB_8888)
        Utils.matToBitmap(source, bitmap)
        view.setImageBitmap(bitmap)
    }
}

效果

高斯噪声

源码

https://github.com/onlyloveyd/LearningAndroidOpenCV

onlyloveyd CSDN认证博客专家 Android Kotlin OpenCV
个人公众号【OpenCV or Android】,热爱Android、Kotlin、Flutter和OpenCV。毕业于华中科技大学计算机专业,曾就职于华为武汉研究所。目前在三线小城市生活,专注技术与研发。
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页