Different output for same code in two different computers

14 visualizaciones (últimos 30 días)
Galo
Galo el 24 de Abr. de 2023
Comentada: Joss Knight el 25 de Abr. de 2023
Hello,
I am using the following MATLAB code:
a=im2uint8(a);
agray=im2gray(a);
figure;tiledlayout('flow','Padding','tight','TileSpacing','tight')
aadjust=imadjust(imsharpen(agray,'Radius',10,'Amount',2));
nexttile;imshow(aadjust); axis on; title("Adjusted Image")
[Rows Columns] = size(aadjust);
bwout = imbinarize(aadjust);
bwout(1:40,:)= 0;
tempend=find(agray(:,floor(Columns/2))==0);
tempend(tempend<floor(Rows/2))=[];
tempend=min(tempend);
bwout(tempend-20:Rows,:)= 0;
bwout=bwareaopen(bwout,10000);
nexttile;imshow(bwout);axis on; title("Image binarized")
where "a" is an input image I provide to MATLAB. The problem is that I am using the exact same code in another computer with the exact same image but I am getting a slightly different output image "bwout", and both computers are using MATALAB R2022b with Windows.
Is there any explanation for why is this happenning?
I attach the two images I'm getting in both computers, you'll notice slight differences in some pixels. After further processing those small differences become a huge difference so I need to have the same output in both computers. Any idea why is this happenning??
Image A
  7 comentarios
DGM
DGM el 25 de Abr. de 2023
Editada: DGM el 25 de Abr. de 2023
It's not clear where the difference is initially occurring, so I'm focusing on the observable difference and working backwards:
% this is the image returned from imsharpen()
imwrite(asharp(720:790,220:320),'asharp.png')
% this is the image returned from imadjust()
imwrite(aadjust(720:790,220:320),'aadjust.png')
% this is the image returned from imbinarize() prior to any edits
imwrite(bwout0(720:790,220:320),'bwout0.png')
% this is the final binary image after the call to bwareaopen()
imwrite(bwout(720:790,220:320),'bwout.png')
The resulting images are attached.
FWIW, I'm using R2019b, Linux, AMD. My results are apparently the same as your second image.
Joss Knight
Joss Knight el 25 de Abr. de 2023
I'm not saying there definitely is no bug, but different computers do give different answers, this is just the way floating point computations work. If your processors have different numbers of cores or different vector processing architectures then the way they parallelize your code will lead to order-of-computation related differences (or sometimes completely different algorithms will be used). This can be especially noticeable in image processing code where a mask is being computed based on a threshold.
You might get your two MATLABs to behave the same by calling maxNumCompThreads(1) on both before running your code.

Iniciar sesión para comentar.

Respuestas (0)

Community Treasure Hunt

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

Start Hunting!

Translated by