我正在尝试过滤空间域中的图像,因此我正在使用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通道图像,这意味着彩色图像。
答案 0 :(得分:10)
彩色图像是三维数组(x,y,颜色)。 conv2
仅针对二维定义,因此不能直接在三维数组上使用。
三个选项:
使用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
答案 1 :(得分:1)
对于n-D输入,您需要使用convn
。
答案 2 :(得分:1)
如果你有R2015a或更新版本,IPT函数imgaussfilt会处理这样的多平面2-d卷积问题,只需传入你的RGB图像。
http://www.mathworks.com/help/images/ref/imgaussfilt.html
如果你不这样做,imfilter也会执行多平面2-d卷积。
对于高斯滤波器,两者都会更快,他们都知道如何为你做可分离的技巧。