高斯滤波器应用高斯滤波器的最优值

时间:2015-02-24 05:31:38

标签: java image opencv image-processing

我使用OpenCV java实现了高斯差异。

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;

import com.atul.JavaOpenCV.Imshow;

public class demodog 

{
public static void main(String args[])
{
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

Mat img=Highgui.imread("C:\\testdatabase\\illumination1.jpg");

Mat g1=new Mat();
Mat g2=new Mat();
Mat g3=new Mat();
Mat g4=new Mat();
Mat g5=new Mat();

Mat r1=new Mat();
Mat r2=new Mat();
Mat r3=new Mat();
Mat r4=new Mat();

Imgproc.GaussianBlur(img, g1, new Size(1,1), 0);
Imgproc.GaussianBlur(img, g2, new Size(3,3), 20);
Imgproc.GaussianBlur(img, g3, new Size(5,5), 40);
Imgproc.GaussianBlur(img, g4, new Size(7,7), 50);
Imgproc.GaussianBlur(img, g5, new Size(11,11),70);

Core.subtract(g2, g1, r1);
Core.subtract(g3, g2, r2);
Core.subtract(g4, g3, r3);
Core.subtract(g5, g4, r4);

Imshow im9 = new Imshow("DOG4");
im9.showImage(r4);

Imshow im8 = new Imshow("DOG3");
im8.showImage(r3);

Imshow im7 = new Imshow("DOG2");
im7.showImage(r2);

Imshow im6 = new Imshow("DOG1");
im6.showImage(r1);

Imshow im = new Imshow("Input Image");
im.showImage(img);
}
}

结果如下所示 DoG result

问题:

我使用了1,3,5,7,11的内核大小和sigma值20,40,50,70来获得结果。我使用了合适的值,或者我可以通过更改值来改善结果。 ??

1 个答案:

答案 0 :(得分:0)

我在这里看:
http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=gaussianblur#gaussianblur

看来你还好。
只需将高斯核半径的规则保持为STD的4-5倍 如果将STD设置为4,则使用大小为[33,33]的内核。

为了更好地了解"高通#34;图像,通常它被添加到128级的DC(对于[0,255]图像)。