gpt4 book ai didi

android - Gabor 滤波器(小波)

转载 作者:太空狗 更新时间:2023-10-29 13:16:45 27 4
gpt4 key购买 nike

我是 OpenCV 和 gabor 过滤器的新手,只想获得这样的 gabor 小波:

enter image description here

我在 Java 中使用这个 OpenCV 代码:

double sigma_bar = 40;
double theta_bar = 0.5;
double lambda_bar = 11;
double gamma_bar = 100;
double psi_bar = 90;
double kernel_size = 150;
Mat intermediate = new Mat(150, 150,CvType.CV_8U);
Mat output = Mat.zeros(150, 150, CvType.CV_32F);
Mat gabor_mat = Imgproc.getGaborKernel(new Size(kernel_size, kernel_size),sigma_bar / 10., theta_bar / 180. * Math.PI,lambda_bar, gamma_bar / 100., psi_bar / 180. * Math.PI, CvType.CV_32F);
Imgproc.filter2D(intermediate, output, -1, gabor_mat);
Bitmap temp = Bitmap.createBitmap(intermediate.cols(), intermediate.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(output, temp);
ImageView gabor = (ImageView) findViewById(R.id.gabor);
gabor.setImageBitmap(temp);

得到这样的输出:

enter image description here

我想我不需要应用 Imgproc.filter2D,但如果没有它,我的应用程序会因为 CvTypes 而崩溃,当我尝试通过转换类型来解决这个问题时,我得到白屏。

任何人都可以帮我得到这个 gabor 小波吗?

最佳答案

您只需要:

  1. normalize具有 NORM_MINMAX 的 gabor 过滤器,以便值适合范围 [0,255]

  2. 使用 convertTo 将标准化图像转换为 CV_8U(来自 CV_64F)

  3. 结果图像将是单 channel 灰度图像。

我不能给你 Java 代码来做到这一点,但我认为这个 C++ fragment 仍然有用,因为基本上存在 1 对 1 到 Java 的转换。然后,您需要向 getGaborKernel 提供参数以获取您需要的形状

这是我得到的结果:

enter image description here

代码:

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
Mat kernel = getGaborKernel(Size(151, 151), 10, 0.1, 10, 1, CV_PI/2.0);
// kernel is of type CV_64F

Mat normalized;
normalize(kernel, normalized, 0, 255, NORM_MINMAX);
// normalized is of type CV_64F, but with values in [0, 255]

Mat converted;
normalized.convertTo(converted, CV_8U, 1, 0);
// converted is of type CV_8U

imshow("Gabor", converted);
waitKey();

return(0);
}

关于android - Gabor 滤波器(小波),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33789130/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com