Artifacts appear on my matlab image

Hello everyone,
I wrote a matlab program to process my data, the results and in the form of image of different colors. The color scale is a choice and this is the problem, because when I use a colormap with 3 different colors I don't have this artifact that appears but when I use the one with the rainbow colors the artifact appears. I'm attaching the image and the code snippet for the colormap. Do you have any idea why I'm having this problem? How can I fix it?

1 Comment

k = [0 0 0]; %# start
p = [1 0 1];
n = [0 0 1];
b = [0 1 1];
g = [0 1 0]; %# middle
y = [1 1 0];
r = [1 0 0];
z = [0 0 0];%# end
% Colormap de taille 64x3, dégradée en arc-en-ciel
cl = zeros (32,3); c2 = zeros (32,3); c3 = zeros (32,3); c4 = zeros (32,3);
c5 = zeros (32,3); c6 = zeros (32,3); c7 = zeros (32,3);
for i = 1:3
cl(:,i) = linspace (k(i), p(i), 32);
c2(:,i) = linspace (p(i), n(i), 32);
c3(:,i) = linspace (n(i), b(i), 32);
c4(:,i) = linspace (b(i), g(i), 32);
c5(:,i) = linspace (g(i), y(i), 32);
c6(:,i) = linspace (y(i), r(i), 32);
c7(:,i) = linspace (r(i), z(i), 32);
end
% Combinaison de toutes les parties sans doublons
c = [cl(1:end-1,:); c2(1:end-1,:); c3(1:end-1,:); c4(1:end-1,:); c5(1:end-1,:); c6(1:end-1,:); c7];
% Afficher la surface
surf (peaks), shading interp
caxis([-1 1])
colormap(c)
colorbar

Sign in to comment.

Answers (1)

We'd have to see your code for 3 colors to say for certain, but here, your colormap sets anything above or below abs(1) to [0 0 0], or black. We don't have your processed data, but it would appear the region of the artifact must contain absolute values >= 1.

14 Comments

I've commented on the absolute value as you can see from the photo, but the problem persists.
For the colormaps code which contains only 3 colors (in reality we have 5 colors with two blue and two red), here it is at the bottom, you can see on the result picture that in this case I don't have an artifact even though it's the same data.
%----------------------------------------------------------------------------------bleu-blanc-rouge----------------------------
B = [0.0840 0.1747 0.3910]; %# start
b = [0 0 1];
g=[0.8290,0.8940, 0.0250]; %# middle
r = [1 0 0];
R = [0.6350 0.0780 0.1840]; %# end
%colormap of size 64-by-3
c1 = zeros(32,3); c2 = zeros(32,3);c3 = zeros(32,3);c4 = zeros(32,3);
for i=1:3
c1(:,i) = linspace(B(i), b(i), 32);
c2(:,i) = linspace(b(i), g(i), 32);
c3(:,i) = linspace(g(i), r(i), 32);
c4(:,i) = linspace(r(i), R(i), 32);
end
c = [c1(1:end-1,:);c2;c3;c4];
%surf(peaks),
shading interp
caxis([-1 1])
colormap (c)
%--------------------------------------------------------------------------------
Cris LaPierre
Cris LaPierre on 20 Aug 2024
Edited: Cris LaPierre on 20 Aug 2024
The difference is in your colormap. In the 7 color example (the one with the artifact), your colormap starts and ends with black. In your 3 color example, the colormap starts with blue and ends with red. If you do not want black in the extremes of your colormap, you must not include it when building your colormap variable.
In order for us to play around with your example, please share your processed data. You can save your variable(s) to a mat file and then attach it to your post using the paperclip icon.
I got rid of the black at the beginning and end, but the problem is still there. I'm sending you my V value file as you requested.
The code you have shared does not create the figure you are showing. Please share all the relevant code so that we can duplicate the issue.
Try with this
The only code that creates a figure in the code you have shared is surf(peaks). However, that does not create your image.
surf(peaks)
Here is my best guess at what you may be doing. Note that it does not show the artifact. The code you have not shared must be doing something additional to the data that is causing the artifact to appear.
load V.mat
surf(X,Y,V1,'LineStyle','none')
view(2)
%----------------------------------------------------------------------------------bleu-blanc-rouge----------------------------
B = [0.0840 0.1747 0.3910]; %# start
b = [0 0 1];
g=[0.8290,0.8940, 0.0250]; %# middle
r = [1 0 0];
R = [0.6350 0.0780 0.1840]; %# end
%colormap of size 64-by-3
c1 = zeros(32,3); c2 = zeros(32,3);c3 = zeros(32,3);c4 = zeros(32,3);
for i=1:3
c1(:,i) = linspace(B(i), b(i), 32);
c2(:,i) = linspace(b(i), g(i), 32);
c3(:,i) = linspace(g(i), r(i), 32);
c4(:,i) = linspace(r(i), R(i), 32);
end
c = [c1(1:end-1,:);c2;c3;c4];
% surf(peaks),
shading interp
caxis([-1 1])
colormap(c)
colorbar
%----------------
figure
surf(X,Y,V1,'LineStyle','none')
view(2)
k = [0 0 0]; %# start
p = [1 0 1];
n = [0 0 1];
b = [0 1 1];
g = [0 1 0]; %# middle
y = [1 1 0];
r = [1 0 0];
z = [0 0 0];%# end
% Colormap de taille 64x3, dégradée en arc-en-ciel
cl = zeros (32,3); c2 = zeros (32,3); c3 = zeros (32,3); c4 = zeros (32,3);
c5 = zeros (32,3); c6 = zeros (32,3); c7 = zeros (32,3);
for i = 1:3
cl(:,i) = linspace (k(i), p(i), 32);
c2(:,i) = linspace (p(i), n(i), 32);
c3(:,i) = linspace (n(i), b(i), 32);
c4(:,i) = linspace (b(i), g(i), 32);
c5(:,i) = linspace (g(i), y(i), 32);
c6(:,i) = linspace (y(i), r(i), 32);
c7(:,i) = linspace (r(i), z(i), 32);
end
% Combinaison de toutes les parties sans doublons
c = [cl(1:end-1,:); c2(1:end-1,:); c3(1:end-1,:); c4(1:end-1,:); c5(1:end-1,:); c6(1:end-1,:); c7];
% Afficher la surface
caxis([-1 1])
colormap(c)
colorbar
Here is my entire code, i use the txt file 'index' for the triangle contour.
Thanks again for your help.
%% Edit to run code here
load V.mat
index = readmatrix('Au_Triangle_Index.txt');
x = X;
y = Y;
k = [0 0 0]; %# start
p = [1 0 1];
n = [0 0 1];
b = [0 1 1];
g = [0 1 0]; %# middle
yy = [1 1 0];
r = [1 0 0];
z = [0 0 0];%# end
% Colormap de taille 64x3, dégradée en arc-en-ciel
cl = zeros(32,3); c2 = zeros(32,3); c3 = zeros(32,3); c4 = zeros(32,3);
c5 = zeros(32,3); c6 = zeros(32,3); c7 = zeros(32,3);
for i = 1:3
cl(:,i) = linspace (k(i), p(i), 32);
c2(:,i) = linspace (p(i), n(i), 32);
c3(:,i) = linspace (n(i), b(i), 32);
c4(:,i) = linspace (b(i), g(i), 32);
c5(:,i) = linspace (g(i), yy(i), 32);
c6(:,i) = linspace (yy(i), r(i), 32);
c7(:,i) = linspace (r(i), z(i), 32);
end
% Combinaison de toutes les parties sans doublons
c = [cl(1:end-1,:); c2(1:end-1,:); c3(1:end-1,:); c4(1:end-1,:); c5(1:end-1,:); c6(1:end-1,:); c7];
%%---------------------------------------------------------------------------
figure % Complete
hold all
pcolor(X,Y,V1)
contour(x,y,real(index'),'linecolor','G');
colorbar
%box on
AX=gca;
AX.LineWidth=2;
AX.FontSize=14;
AX.TickLength=[0.02 0.02];
AX.XTick=-300:150:300;
AX.YTick=-300:150:300;
axis tight
%xlabel('X position (nm)','Fontsize',18,'FontWeight','bold')
%ylabel('Y position (nm)','Fontsize',18,'FontWeight','bold')
axis equal
%axis([-160-Rod_Width-Gap_Width/2,160+Rod_Width+Gap_Width/2,-160-Rod_Length+Gap_Length/2,160+Rod_Length-Gap_Length/2])
%axis([-40-Rod_Width-Gap_Width/2,40+Rod_Width+Gap_Width/2,-150-Rod_Length+Gap_Length/2,150+Rod_Length-Gap_Length/2])
colorbar
CA=caxis;
CB=colorbar;
CB.LineWidth=1;
CB.FontSize=14;
CB.Ticks=-10:1:10;
CB.Label.String='V';
CB.Label.FontSize=18;
CB.Label.FontWeight='bold';
figure % Axis only
colormap (c)
shading interp
box on
AX=gca;
AX.LineWidth=2;
AX.FontSize=14;
AX.TickLength=[0.02 0.02];
AX.XTick=-300:150:300;
AX.YTick=-300:150:300;
%xlabel('X position (nm)','Fontsize',18,'FontWeight','bold')
%ylabel('Y position (nm)','Fontsize',18,'FontWeight','bold')
%axis equal
%axis([-80-Rod_Width-Gap_Width/2,80+Rod_Width+Gap_Width/2,-80-Rod_Length+Gap_Length/2,80+Rod_Length-Gap_Length/2])
%axis([-40-Rod_Width-Gap_Width/2,40+Rod_Width+Gap_Width/2,-150-Rod_Length+Gap_Length/2,150+Rod_Length-Gap_Length/2])
axis tight
colorbar
caxis(CA);
CB=colorbar;
CB.LineWidth=1;
CB.FontSize=14;
CB.Ticks=-10:1:10;
CB.Label.String='V';
CB.Label.FontSize=18;
CB.Label.FontWeight='bold';
Cris LaPierre
Cris LaPierre on 21 Aug 2024
Edited: Cris LaPierre on 21 Aug 2024
I've edited your post so that the code can be run here. This does not generate the figure you are asking about. Could you share a working example that recreates the issue? Use the green play button in the toolstrip to run your code here.
figure
index=dlmread('Au_Triangle_Index.txt');
%% Edit so that code runs here
load V.mat
x = X; y = Y;
% [X,Y]=meshgrid(x,y);
%% -----------------------------------------
hold all
contour(x,y,real(index'),'linecolor','G');
surf(X,Y,V1,'LineStyle','none')
view(2)
k = [0 0 0]; %# start
p = [1 0 1];
n = [0 0 1];
b = [0 1 1];
g = [0 1 0]; %# middle
y = [1 1 0];
r = [1 0 0];
z = [0 0 0];%# end
% Colormap de taille 64x3, dégradée en arc-en-ciel
cl = zeros (32,3); c2 = zeros (32,3); c3 = zeros (32,3); c4 = zeros (32,3);
c5 = zeros (32,3); c6 = zeros (32,3); c7 = zeros (32,3);
for i = 1:3
cl(:,i) = linspace (k(i), p(i), 32);
c2(:,i) = linspace (p(i), n(i), 32);
c3(:,i) = linspace (n(i), b(i), 32);
c4(:,i) = linspace (b(i), g(i), 32);
c5(:,i) = linspace (g(i), y(i), 32);
c6(:,i) = linspace (y(i), r(i), 32);
c7(:,i) = linspace (r(i), z(i), 32);
end
% Combinaison de toutes les parties sans doublons
c = [cl(1:end-1,:); c2(1:end-1,:); c3(1:end-1,:); c4(1:end-1,:); c5(1:end-1,:); c6(1:end-1,:); c7];
% Afficher la surface
caxis([-1 1])
colormap(c)
colorbar
colorbar
%box on
AX=gca;
AX.LineWidth=2;
AX.FontSize=14;
AX.TickLength=[0.02 0.02];
AX.XTick=-300:150:300;
AX.YTick=-300:150:300;
axis tight
%xlabel('X position (nm)','Fontsize',18,'FontWeight','bold')
%ylabel('Y position (nm)','Fontsize',18,'FontWeight','bold')
axis equal
%axis([-160-Rod_Width-Gap_Width/2,160+Rod_Width+Gap_Width/2,-160-Rod_Length+Gap_Length/2,160+Rod_Length-Gap_Length/2])
%axis([-40-Rod_Width-Gap_Width/2,40+Rod_Width+Gap_Width/2,-150-Rod_Length+Gap_Length/2,150+Rod_Length-Gap_Length/2])
colorbar
CA=caxis;
CB=colorbar;
CB.LineWidth=1;
CB.FontSize=14;
CB.Ticks=-10:1:10;
CB.Label.String='V';
CB.Label.FontSize=18;
CB.Label.FontWeight='bold';
it works now :)
Great to hear. I've edited your post so that your code runs here as well, showing no artifact.
Thank you very much for your invaluable help.

Sign in to comment.

Categories

Asked:

on 20 Aug 2024

Commented:

on 23 Aug 2024

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!