# grayscale image problem in matlab

1 view (last 30 days)
cyrine tijani on 19 Apr 2021
hi i work with this code
J=handles.o;
[n m]=size(J)
% parameters settings
filter_family = 'DOP';
ratio = .98;
lambda = 5;
parameters = [lambda, ratio]
lambda = parameters(1);
ratio = parameters(2);
filter_parameters = [lambda, ratio ];
orient_mode = 'robust';
freq_mode = 'robust';
parms = struct('filter_family',filter_family,...
'filter_parameters',filter_parameters,...
'orient_mode',orient_mode,...
'freq_mode',freq_mode,'sigma',.5);
% Calcul de la représentation fréquentille d'un filtre en Quadrature (HR1 et HR2)
[sx,sy]=size(J)
sze=[sx,sy]
if sx == 1
sx = sy;
sy = 1;
end
if mod(sx,2)
yrange = ((-(sx-1)/2:(sx-1)/2))/(sx-1);
else
yrange = (-sx/2:(sx/2-1))/sx;
end
if sy == 1
u1 = xrange;
u2 = 1;
radius = abs(ifftshift(u1)); % Quadrant shift to put 0 frequency at the corners
lp = 1;
else
if mod(sy,2)
xrange = (-(sy-1)/2:(sy-1)/2)/(sy-1);
else
xrange = (-sy/2:(sy/2-1))/sy;
end
[u1,u2] = meshgrid(xrange, yrange);
u1 = ifftshift(u1); % Quadrant shift to put 0 frequency at the corners
u2 = ifftshift(u2);
% Calcul de filtre pass bas
[sx,sy]=size(J)
sze = [sx,sy]
cutoff = .4
n =10
if cutoff < 0 | cutoff > 0.5
error('cutoff frequency must be between 0 and 0.5');
end
if rem(n,1) ~= 0 | n < 1
error('n must be an integer >= 1');
end
if length(sze) == 1
rows = sze; cols = sze;
else
rows = sze(1); cols = sze(2);
end
% Set up X and Y matrices with ranges normalised to +/- 0.5
% The following code adjusts things appropriately for odd and even values
% of rows and columns.
if mod(cols,2)
xrange = [-(cols-1)/2:(cols-1)/2]/(cols-1);
else
xrange = [-cols/2:(cols/2-1)]/cols;
end
if mod(rows,2)
yrange = [-(rows-1)/2:(rows-1)/2]/(rows-1);
else
yrange = [-rows/2:(rows/2-1)]/rows;
end
[x,y] = meshgrid(xrange, yrange);
radius = sqrt(x.^2 + y.^2); % A matrix with every pixel = radius relative to centre.
lp = ifftshift( 1.0 ./ (1.0 + (radius ./ cutoff).^(2*n)) ); % The filter
end
% Calcul de filtre de log-Gabor (H)
lambda = parameters(1);
ratio = parameters(2);
if ratio >= 1
error('ratio must be smaller than 1 !!!')
end
s2 = lambda/(2*pi*(ratio-1))*log(ratio);
s1 = ratio*s2;
DoP = DoP.*lp;
DoP(1,1) = 0;
H = DoP;
% Calcul des filtres en quadrature
IM = fft2(J);
IM=double(IM);
[n,m]=size(IM)
clear im
% Calcul de w et q (les compsantes de signal monogénique)
w = real(ifft2(H.*IM)) % Even component
q1 = ifft2 (imag(HR1.*H.*IM));
q2 = ifft2(imag(HR2.*H.*IM));
fM.w = w; % Even component
fM.q1 = q1;
fM.q2 = q2;
q= sqrt(q1.^2 + q2.^2)% Odd component
%%% orientation computation
if strcmp(parms.orient_mode,'robust')
s = parms.sigma;
x = -floor(4*s):floor(4*s);
w1 = exp(-x.^2/(s/2)); w1 = w1./sum(w1(:));
else
w1 = 0;
end
% calcul de cosinus et sinus
w1 = w1(:);
f1 = real(q);
f2 = imag(q);
J11 = f1.^2;
J12 = f1.*f2;
J22 = f2.^2;
clear f1 f2
N = floor(numel(w1)/2);
theta = 1/2*atan2(2*J12,J22-J11)
sinus = cos(theta);
cosinus = sin(theta);
% extraction des paramètres
A = sqrt(w.^2 + abs(q1).^2 +abs(q2).^2); % enveloppe
% Affichage des images de phase et amplitude monogénique
feats = struct('A',A);
axes(handles.axes7);
imagesc(feats.A);
colorbar
title('\color{white}MONOGENIC Amplitude end diastolic','fontsize',12),
set(gca,'Xtick',[])
set(gca,'Ytick',[])
at first i display an image then i apply this code on it , it was supposed to give me an image with colors like in the first photo bellow but it gaves me a grayscale image
NB: if i show it in a figure it works but when i put in an axes it doesn't work