在RGB图像上应用Matlab图像滤镜

时间:2014-10-24 12:13:01

标签: matlab plot image-editing image-effects

我有以下Matlab代码来处理两个图像,灰度图像和RGB图像。 关键是在两张图片上应用AverageGaussianLaplacian过滤器。

%%Clear
clear
clc
%%Reading images
gray=imread('cameraman.tif')
[gray_table gray_map]=gray2ind(gray,256)
rgb=imread('peppers.png')
[rgb_table rgb_map]=rgb2ind(rgb,256)
%%Creating filters
average=fspecial('average',3)
gaussian=fspecial('gaussian',3,0.5)
laplacian=fspecial('laplacian',0.9)
%%Applying filters
average_filterd_gray_table=imfilter(gray_table,average)
gaussian_filterd_gray_table=imfilter(gray_table,gaussian)
laplacian_filterd_gray_table=imfilter(gray_table,laplacian)
average_filterd_rgb_table=imfilter(rgb_table,average)
gaussian_filterd_rgb_table=imfilter(rgb_table,gaussian)
laplacian_filterd_rgb_table=imfilter(rgb_table,laplacian)
%%view
figure
subplot(1,4,1),imshow(gray_table,gray_map),title('Original Indexed Gray')
subplot(1,4,2),imshow(average_filterd_gray_table,gray_map),title('Average Filtered Indexed Gray')
subplot(1,4,3),imshow(gaussian_filterd_gray_table,gray_map),title('Gaussian Filtered Indexed Gray')
subplot(1,4,4),imshow(laplacian_filterd_gray_table,gray_map),title('Laplacian Filtered Indexed Gray')
figure
subplot(1,4,1),imshow(rgb_table,rgb_map),title('Original Indexed RGB')
subplot(1,4,2),imshow(average_filterd_rgb_table,rgb_map),title('Average Filtered Indexed RGB')
subplot(1,4,3),imshow(gaussian_filterd_rgb_table,rgb_map),title('Gaussian Filtered Indexed RGB')
subplot(1,4,4),imshow(laplacian_filterd_rgb_table,rgb_map),title('Laplacian Filtered Indexed RGB')

代码适用于灰度图像。但是在RGB图像上它只是给出一个失真的结果。如何解决?

3 个答案:

答案 0 :(得分:2)

根据rgb2ind的文档(点击here):

加载rgb图像时如下:

[X,map] = rgb2ind(RGB,n),文档说:

  

注意结果图像X中的值是索引   colormap map并不应该用于数学处理等   作为过滤操作。

因此,最好直接过滤RGB图像。以下工作正常:

clear
clc
close all

RGBImage = imread('peppers.png');

average = fspecial('average',3);
gaussian=fspecial('gaussian',3,0.5);
laplacian=fspecial('laplacian',0.9);

RGB_Average = imfilter(RGBImage,average);
RGB_Gaussian= imfilter(RGBImage,gaussian);
RGB_Laplacian = imfilter(RGBImage,laplacian);

figure;
subplot(2,2,1)
imshow(RGBImage)
title('Original')

subplot(2,2,2)
imshow(RGB_Average)
title('Average')

subplot(2,2,3)
imshow(RGB_Gaussian)
title('Gaussian')

subplot(2,2,4)
imshow(RGB_Laplacian)
title('Laplacian')

给出了这个:

enter image description here

答案 1 :(得分:2)

您正在通过以下方式阅读图片:

rgb=imread('peppers.png')
[rgb_table rgb_map]=rgb2ind(rgb,256);

使用此功能,您可以应用过滤器,因为您应用的方式对图像颜色进行了一些更改:

[rgb_table rgb_map]=imread('peppers.png')
average=fspecial('average',3);
gaussian=fspecial('gaussian',3,0.5);
laplacian=fspecial('laplacian',0.9);
average_filterd_rgb_table=imfilter(rgb_table,average);
gaussian_filterd_rgb_table=imfilter(rgb_table,gaussian);
laplacian_filterd_rgb_table=imfilter(rgb_table,laplacian);
subplot(2,2,1),imshow(rgb),title('Original Indexed RGB')
subplot(2,2,2),imshow(average_filterd_rgb_table),title('Average Filtered Indexed RGB')
subplot(2,2,3),imshow(gaussian_filterd_rgb_table),title('Gaussian Filtered Indexed RGB')
subplot(2,2,4),imshow(laplacian_filterd_rgb_table),title('Laplacian Filtered Indexed RGB')

这是我得到的图像:

答案 2 :(得分:0)

我认为您不需要使用gray2indrgb2ind,看看是否有效。

gray=imread('cameraman.tif');
rgb=imread('peppers.png');
%%Creating filters
average=fspecial('average',3);
gaussian=fspecial('gaussian',3,0.5);
laplacian=fspecial('laplacian',0.9);
%%Applying filters
average_filterd_gray=imfilter(gray,average);
gaussian_filterd_gray=imfilter(gray,gaussian);
laplacian_filterd_gray=imfilter(gray,laplacian);
average_filterd_rgb=imfilter(rgb,average);
gaussian_filterd_rgb=imfilter(rgb,gaussian);
laplacian_filterd_rgb=imfilter(rgb,laplacian);
%%view
figure
subplot(2,2,1),imshow(gray),title('Original Indexed Gray')
subplot(2,2,2),imshow(average_filterd_gray),title('Average Filtered Indexed Gray')
subplot(2,2,3),imshow(gaussian_filterd_gray),title('Gaussian Filtered Indexed Gray')
subplot(2,2,4),imshow(laplacian_filterd_gray),title('Laplacian Filtered Indexed Gray')
figure
subplot(2,2,1),imshow(rgb),title('Original Indexed RGB')
subplot(2,2,2),imshow(average_filterd_rgb),title('Average Filtered Indexed RGB')
subplot(2,2,3),imshow(gaussian_filterd_rgb),title('Gaussian Filtered Indexed RGB')
subplot(2,2,4),imshow(laplacian_filterd_rgb),title('Laplacian Filtered Indexed RGB')