title: CvInvoke.Canny() - gives different results on different computers
body: <p>when trying to perform some binary manipulations on the exact same image file, but on different computers (&amp;monitors), i get a different result when using the <code>CvInvoke.Canny()</code> method.<br>
  before calling this method, i use several manipulating methods such as: <code>CvInvoke.Threshold()</code> , <code>CvInvoke.Erode()</code> , <code>CvInvoke.Dilate()</code> and more...
  the result of all of these is always equal.<br>
  it is just when i call:</p>
  
  <pre><code>UMat inputImageUMAT = new Image&lt;Gray, byte&gt;(inputImageBitmap).ToUMat();
  UMat imageUmat = new UMat();
  CvInvoke.Threshold(imageInputUMAT, imageUmat, threshold, 255, 
  Emgu.CV.CvEnum.ThresholdType.Binary);
  
  // clear noises with Erode &amp; Dilate:
  CvInvoke.Erode(imageUmat, imageUmat, null, new Point(-1, -1), 1, 
  BorderType.Constant, CvInvoke.MorphologyDefaultBorderValue);
  CvInvoke.Dilate(imageUmat, imageUmat, null, new Point(-1, -1), 1, 
  BorderType.Constant, CvInvoke.MorphologyDefaultBorderValue);
  
  //use image pyr to remove noise:
  UMat pyrDown = new UMat();
  CvInvoke.PyrDown(imageUmat, pyrDown);
  CvInvoke.PyrUp(pyrDown, imageUmat);
  
   // set cannyEdges to hold the outlines of the shapes detected in the image 
  (according to threshold) 
  UMat cannyEdges = new UMat();
  CvInvoke.Canny(imageUmat, cannyEdges, threshold, threshold);
  </code></pre>
  
  <p><strong>there is always a difference between the different computers outputs.<br>
  nonetheless, every computer always gives the exact same result - time after time.</strong></p>
  
  <p>what is it that might be causing the problem?<br>
  i must have the exact same results everywhere...</p>
  
  <p>p.s.<br>
  i use the C# nugget: EMGU.CV v3.3.0.2824</p>
  
  <p>edit:<br>
  i took the original file: <a href="https://www.dropbox.com/s/k7y37xh793ccdt5/andotbadotgray.bmp?dl=0" rel="nofollow noreferrer">original</a><br>
  and skipped all the manipulations on way and performed <code>Canny</code> immediately:  </p>
  
  <pre><code>UMat inputImageUMAT = new UMat(fileName, ImreadModes.Grayscale);
  UMat cannyEdges = new UMat();
  CvInvoke.Canny(imageInputUMAT, cannyEdges, threshold, threshold, 3, true);
  cannyEdges.Save(outputFileName);
  </code></pre>
  
  <p>result with threshold 210 machine 1: <a href="https://www.dropbox.com/s/5t2i42wwsikea0l/andotbadotgray_threshold_210__canny_comp1.bmp?dl=0" rel="nofollow noreferrer">result_1</a><br>
  result with threshold 210 machine 2: <a href="https://www.dropbox.com/s/mt5tf6fkc7sbwiu/andotbadotgray_threshold_210_canny_comp2.bmp?dl=0" rel="nofollow noreferrer">result_2</a><br>
  -- there is 1 pixel difference between the 2 results</p>