fspecial函数
作用:构造卷积核,可以与filter2、conv2和imfilter配合使用
h = fspecial(type) h = fspecial('average',hsize) h = fspecial('disk',radius) h = fspecial('gaussian',hsize,sigma) h = fspecial('laplacian',alpha) h = fspecial('log',hsize,sigma) h = fspecial('motion',len,theta) h = fspecial('prewitt') h = fspecial('sobel')
总结
filter2、conv2将输入转换为double类型,输出也是double的,输入总是补零(zero padded), 不支持其他的边界补充选项。
imfilter:不将输入转换为double,输出只与输入同类型,有灵活的边界补充选项。建议使用!
代码演示
MATLAB代码:
clear; closeall; clc; %% fspecial函数value = 5; h = fspecial('gaussian',[55],value); srcImage = imread('lena.jpg'); srcImage = rgb2gray(srcImage); srcImage_double = double(srcImage); %% conv2函数 默认:'full',只能补零image_conv2 = conv2(srcImage_double,h); %% filter2函数 默认:'same',只能补零image_filter2 = filter2(h,srcImage_double); %% imfilter函数 默认:'same'image_imfilter = imfilter(srcImage,h,'replicate'); %% 显示图像figure(1); subplot(221);imshow(srcImage,[]); title('原图'); subplot(222);imshow(image_conv2,[]); title('conv2'); subplot(223);imshow(image_filter2,[]); title('filter2'); subplot(224);imshow(image_imfilter,[]); title('imfilter');
效果图: