繁体   English   中英

Gabor滤镜的彩色图像

[英]Colored image by Gabor Filters

我正在使用Gabor过滤器代码,并且一切似乎运行正常,但是输出图像出现问题。 我使用的代码属于这里: Gabor过滤器

我创建了[4x8]滤镜,其滤镜具有8个方向,每个方向都具有不同的波长。

伽柏滤波器


现在,我将图像作为输入:

汽车

所以我得到的输出为:

在此处输入图片说明


我是否应该获得黑白图像?
我的意思是为什么它是彩色的。
当我使用ndims(imgS)检查尺寸时,它告诉我们图像是二维的。


为了清楚起见,以下是将Image与上述补丁进行卷积的代码:

function [img]=Convolve_Gabor(R,C,GW,img)
%if not grayscaled then grayscale it
if ndims(img)>2
    img=rgb2gray(img);
end

%Convert to Double so that its accepteble everywhere
img=im2double(img);

% Store the original size.
[m,n] = size(img);

%{
 The minimum amount of padding is just "one side" of the filter.
 We add 1 if the image size is odd.
 assuming the filter size is odd.
%}

pR = (R-1)/2; % make pR half of R
pC = (C-1)/2; % make pC half of C

if rem(m,2) ~= 0; pR = pR + 1; end; % if image height is odd make pR even
if rem(n,2) ~= 0; pC = pC + 1; end; % if image width is odd make pC even
img = padarray(img,[pR pC],'pre'); % Pad image to handle circular convolution.

% Pad all the filters to size of padded image.
% We made sure padsize will only be even, so we can divide by 2.
padsize = size(img) - [R C];
GW = cellfun( @(x) padarray(x,padsize/2),GW,'UniformOutput',false);

imgFFT = fft2(img); % Pre-calculate image FFT.
imgfilt={};
for i=1:length(GW)
    filter = fft2( ifftshift( GW{i} ) ); % See Numerical Recipes.
    imgfilt{i} = ifft2( imgFFT .* filter ); % Apply Convolution Theorem.
end

%# Sum the responses to each filter. Do it in the above loop to save some space.
imgS = zeros(m,n);

for i=1:length(imgfilt)
    imgS = imgS + imgfilt{i}(pR+1:end,pC+1:end); % Just use the valid part.
end
disp(ndims(imgS));
figure,imagesc(abs(imgS)),hold on;

仅仅因为图像只有一个通道,即数据是二维矩阵,并不意味着它不能转换为三维RGB空间。 该技术称为索引颜色 (与truecolor相反)。 Matlab似乎正在使用默认的jet颜色图将数据转换为颜色。 如果要使图像显示为灰度,请在绘制后使用colormap功能:

colormap(gray(256));

有关更多详细信息,请参见The MathWorks的博客文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM