7

我正在尝试过滤空间域中的图像,所以我正在使用 conv2 函数。

这是我的代码。

cd /home/samuelpedro/Desktop/APIProject/

close all
clear all
clc

img = imread('coimbra_aerea.jpg');
%figure, imshow(img);

size_img = size(img);

gauss = fspecial('gaussian', [size_img(1) size_img(2)], 50);

%figure, surf(gauss), shading interp

img_double = im2double(img);

filter_g = conv2(gauss,img_double);

我得到了错误:

Undefined function 'conv2' for input arguments of type 'double' and attributes 'full 3d
real'.

Error in test (line 18)
filter_g = conv2(gauss,img_double);

现在我想知道,我不能使用 3 通道图像,即彩色图像。

4

3 回答 3

11

彩色图像是 3 维数组 (x,y,color)。 conv2仅针对 2 维定义,因此不能直接在 3 维数组上工作。

三个选项:

  • 使用 n 维卷积,convn()

  • 使用 转换为灰度图像rgb2gray(),并在 2D 中过滤:

    filter_g = conv2(gauss,rgb2gray(img_double));

  • 在 2D 中分别过滤每种颜色 (RGB):

    filter_g = zeros(size(im_double));
    for i = 1:3
      filter_g(:,:,i) = conv2(gauss, im_double(:,:,i);
    end
    
于 2012-12-15T01:38:48.363 回答
1

对于 nD 输入,您需要使用convn.

于 2012-12-15T01:13:46.550 回答
1

如果你有 R2015a 或更新版本,IPT 函数 imgaussfilt 处理这样的多平面二维卷积问题,只需传入你的 RGB 图像。

http://www.mathworks.com/help/images/ref/imgaussfilt.html

如果不这样做,imfilter 还会执行多平面 2-d 卷积。

对于高斯滤波器来说,两者都会更快,他们都知道如何为你做可分离的技巧。

于 2015-10-06T02:18:31.167 回答