Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 如何优化代码以获得更好的执行时间_Opencv_Image Processing_Kotlin - Fatal编程技术网

Opencv 如何优化代码以获得更好的执行时间

Opencv 如何优化代码以获得更好的执行时间,opencv,image-processing,kotlin,Opencv,Image Processing,Kotlin,我正在实现一个名为BM3D的图像处理算法,我已经实现了对灰度图像去噪的结果,但问题是它太慢了,即使是436×436的灰度图像 我已经试着想办法加快我对数组和列表所做的工作,但并没有得到太多的改进 val img = imread("files/image.png", 0) val img3= Mat(img.rows(),img.cols(),img.type()) val listaBlocos = mutableListOf(Pair(0.0, Pair(0,0))) val tamanh

我正在实现一个名为BM3D的图像处理算法,我已经实现了对灰度图像去噪的结果,但问题是它太慢了,即使是436×436的灰度图像

我已经试着想办法加快我对数组和列表所做的工作,但并没有得到太多的改进

val img = imread("files/image.png", 0)
val img3= Mat(img.rows(),img.cols(),img.type())

val listaBlocos = mutableListOf(Pair(0.0, Pair(0,0)))
val tamanhoBloco = 3 //Block Size
val tamanhoJanela = 9 //Window Size
val mediaPorBloco = DoubleArray(16)
var sum = 0.0
listaBlocos.clear()
val stats_file = File("files/tempos436x436.txt")
val test = 10
for (x in 0 until test){
    val timeelapsed = measureTimeMillis {
        for (col in 20 ..img.width() - 20) {
            for (row in 20 ..img.height() - 20) {
                val block1 = generateBlock(img, row, col, tamanhoBloco)
                for (c in -tamanhoJanela..tamanhoJanela) {
                    for (l in -tamanhoJanela..tamanhoJanela) {
                        val  block2 = generateBlock(img, row + l, col + c, tamanhoBloco)
                        val  d = distBlock(block1, block2)
                        val  par = Pair(d, Pair(row + l, col + c))
                        listaBlocos.add(par)
                    }
                }
                val listaBlocosOrdenada = listaBlocos.sortedWith(compareBy { it.first })
                listaBlocos.clear()
                for (k in 0..15) {
                    sum = 0.0
                    val c2 = listaBlocosOrdenada[k].second.second
                    val l2 = listaBlocosOrdenada[k].second.first

                    for (c in 0..tamanhoBloco - 1) {
                        for (l in 0..tamanhoBloco - 1) {
                            sum += img.get(l2 - l, c2 - c)[0]
                        }
                    }
                    mediaPorBloco[k] = sum / 4
                }
                val v = mediaPorBloco.average()
                img3.put(row,col,v)

            }
        }
    }
imwrite("files/resultado.png", img3)
stats_file.appendText("teste$x 100X200 $timeelapsed\n")

}

实际图像去噪的效果很好,但是去噪436 x 436图像可能需要15分钟。我目前使用的是一个带有Ubuntu和4核的虚拟机,一个4 Gb的Ram

让编译器变得更好、更高效是最简单的方法。但如果你的目标更高。如何从面向对象/ java编程风格改变C++,在所有这些数学方法上使用SSE /霓虹灯指令集?这应该给你最高的速度?请看这里的详细样品。436 X 436上的BM3D 15分钟有点糟糕。现在很多基于深度学习的方法可以运行得更快。是的,你是对的,但问题是我真的必须使用kotlin,并且已经实现了该算法,还有其他参数可以降低执行时间,例如块大小或窗口大小,但它会对给定代码的去噪效果非常差,我认为没有任何有效的改进方法。但是对于distBlock之类的东西,如果可能的话,可以尝试一些基于SSE的库。假设编译器优化了范围表达式和对象创建之类的东西,那么没有明显的性能改进。你需要运行一个分析器,看看时间花在了什么地方。更好、更高效的编译器是最简单的方法。但如果你的目标更高。如何从面向对象/ java编程风格改变C++,在所有这些数学方法上使用SSE /霓虹灯指令集?这应该给你最高的速度?请看这里的详细样品。436 X 436上的BM3D 15分钟有点糟糕。现在很多基于深度学习的方法可以运行得更快。是的,你是对的,但问题是我真的必须使用kotlin,并且已经实现了该算法,还有其他参数可以降低执行时间,例如块大小或窗口大小,但它会对给定代码的去噪效果非常差,我认为没有任何有效的改进方法。但是对于distBlock之类的东西,如果可能的话,可以尝试一些基于SSE的库。假设编译器优化了范围表达式和对象创建之类的东西,那么没有明显的性能改进。你需要运行一个分析器,看看时间花在哪里