【问题标题】:High pass filter image using matlab [duplicate]使用matlab的高通滤波器图像[重复]
【发布时间】:2023-03-08 18:00:01
【问题描述】:

我正在尝试对这张图片应用高通滤镜。

A = 'url';
B = imread(A, 'jpg');
figure(1), imshow(B);
C = rgb2gray(B);
figure(2), imshow(C);
e = fspecial('gaussian', [3,3], 0.5);
n = imfilter(C,e);
figure(3), imshow(n)
p = [1 1 1;
     1 1 1;
     1 1 1]/9;
figure(4), freqz2(p)
D = imfilter(C,p);
figure(5), imshow(D)
K = medfilt2(D,[3 3]);
figure(6), imshow(K)

我在这里应用了一个低通滤波器。如何应用高通滤波器?

【问题讨论】:

  • 3x3 过滤器永远不是高斯过滤器。我不知道为什么 MATLAB 允许这样做。 0.5 的 sigma 太小,无法正确采样高斯核。您希望将 sigma 参数保持为至少 0.8,但最好保持为 1,并将过滤器大小保持为 6*sigma+1(因此至少为 7x7)。如果你做任何其他事情,你还不如使用三角滤波器,因为你不会拥有高斯核的任何优点。
  • 重新打开:这个问题是关于2D(图像)过滤,而另一个是关于1D(信号)过滤。不能简单地将一维方法应用于二维数据。
  • @luis-mendo 我认为你应该考虑重新提出这个问题,因为它是关于 2D 而副本是关于 1D。
  • @mad-physicist 请考虑重新打开,因为这大约是 2D,骗子大约是 1D。
  • @beaker 请考虑重新打开,因为这大约是 2D,dupe 大约是 1D。

标签: matlab image-processing highpass-filter


【解决方案1】:

尝试使用不同的过滤器,例如:

h = fspecial('laplacian');

【讨论】:

    【解决方案2】:

    根据您的具体应用,您可以使用多个高通滤波器。高通滤波器通常用于突出边界。

    一个常用的函数是Laplacian of Gaussian filter

    log = fspecial('log',[3 3],0.5);
    figure; freqz2(log);
    

    另一个是Laplacian filter

    laplacian = fspecial('laplacian',0.5);
    figure; freqz2(laplacian);
    

    或者您可以定义自己的过滤器,例如一阶导数 2D 过滤器:

    p = [1 0 -1;
         0 0 0;
        -1 0 1];
    figure; freqz2(p)
    

    【讨论】:

    • 只是想指出带有 fspecial 的 Laplacian filter 只接受一个参数 alpha (
    • @AbhishekTyagi 谢谢,我更正了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 2015-07-28
    • 2016-09-27
    • 2016-02-13
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    相关资源
    最近更新 更多