我有以下Matlab代码来处理两个图像,灰度图像和RGB
图像。
关键是在两张图片上应用Average
,Gaussian
和Laplacian
过滤器。
%%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图像上它只是给出一个失真的结果。如何解决?
答案 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')
给出了这个:
答案 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)
我认为您不需要使用gray2ind
和rgb2ind
,看看是否有效。
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')