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次元配列では直接機能しません。

3つのオプション:

  • n次元の畳み込みを使用し、convn()

  • を使用してグレースケール画像に変換し、rgb2gray()2Dでフィルタリングします。

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

  • 各色(RGB)を2Dで個別にフィルタリングします。

    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 はこのような複数平面の 2-d 畳み込み問題を処理し、RGB 画像を渡すだけです。

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

そうでない場合、 imfilter は複数平面の 2 次元畳み込みも実行します。

どちらもガウス フィルターの場合は高速になります。どちらも、分離可能なトリックを実行する方法を知っています。

于 2015-10-06T02:18:31.167 に答える