Page 1 of 1

Different images between MATLAB and ImageMagick

Posted: 2019-09-20T01:06:35-07:00
by filippogambarota
Hi,
I'm using ImageMagick 7.0.8-64 Q16 for Windows and MATLAB R2019. I'm doing the same operation (resizing with bicubic interpolation method) in both programs.

ImageMagick code:

Code: Select all

magick start.png -resize 400x200! -interpolate Catrom -quality 100 start_magick_100.png
MATLAB code

Code: Select all

start_matlab = imresize(start, [200 400], "bicubic")
imwrite(start_matlab, "start_matlab.png", "png")
Now, the difference is not visible but reading again both images in MATLAB and ImageJ they are a little bit different in terms of pixels count. I mean that the pixel count is the same but summing the image matrix in MATLAB give me a different result.
How can it be possible? Do IM and Matlab could have different functions even for these simple operations?

Re: Different images between MATLAB and ImageMagick

Posted: 2019-09-20T04:02:25-07:00
by snibgo
"-interpolate" is a setting. If you want it to affect the "-resize" operation, you need to put that before "-resize", not after. But "-interpolate" has no effect on "-resize".

"-filter" does have an effect on "-resize". For example, "-filter Cubic -resize 400x200!".

When IM makes each output pixel from a number of input pixels, it uses an EWA (Elliptical Weighted Average) resampling algorithm. I don't know if MATLAB does this, or if it uses the identical algorithm at identical precision.

In general, I would be surprised if two image processors gave exactly the same result for a non-trivial operation. The question is, how different are they?

Re: Different images between MATLAB and ImageMagick

Posted: 2019-09-20T08:53:08-07:00
by fmw42
You can avoid the EWA and use bilinear or spline interpolation by using

Code: Select all

-filter point -interpolate xxx
see

Code: Select all

convert -list interpolate
for options


Or better just use

Code: Select all

-filter Catrom
which is the same as Keys cubic convolution (bi-cubic)