Re: Fast way to Rotate a bitmap in Mathematica 6.0
- To: mathgroup at smc.vnet.net
- Subject: [mg102172] Re: [mg102083] Fast way to Rotate a bitmap in Mathematica 6.0
- From: Patrick Scheibe <pscheibe at trm.uni-leipzig.de>
- Date: Fri, 31 Jul 2009 05:56:43 -0400 (EDT)
- References: <200907290908.FAA19489@smc.vnet.net>
Hi, a simple thing to do is to take the array of pixels, interpolate each color-channel and then create a new array for each channel where the pixel values at {x,y} are given by ip[ M.{x,y}] Here ip is an interpolating function and M is the rotation-matrix around your desired angle: MyImageRotate[data_List, phi_?NumericQ] := Module[{nx, ny, dim, ip, ipfunc}, If[Length[dim = Dimensions[data]] =!= 3, Print["This version is only for color-images"]; Return[$Failed]]; {ny, nx} = Most@dim; ip = ListInterpolation[#, {{-nx/2, nx/2}, {-ny/2, ny/2}}] & /@ Transpose[data, {3, 2, 1}]; ipfunc[x_, y_] := If[x < -nx/2 || x > nx/2 || y < -ny/2 || y > ny/2, Array[0 &, Last@dim], Round@Through[ip[x, y]]]; Table[ipfunc[x Cos[phi] - y Sin[phi], y Cos[phi] + x Sin[phi]], {y, -ny/2, ny/2 - 1}, {x, -nx/2, nx/2 - 1}]] img = Import["http://sipi.usc.edu/database/misc/4.2.04.tiff", "Data"]; GraphicsRow[ArrayPlot[#, ColorFunction -> RGBColor] & /@ {img, MyImageRotate[img, 12.1231/180*2 Pi] }] There are several things needing your attention, e.g. are your pixels 8-bit, then they should have this type after rotation too, Graylevel images just have a value for each pixel and not a list of values, ... but these are minor things. But, as you can see while you are waiting, this version is far from beeing *fast*. A MathLink-call to a parallel C-implementation of, for instance "Two-pass image and volume rotation" is, to put it mildly, in another league of speed. Cheers Patrick On Wed, 2009-07-29 at 05:08 -0400, olliH wrote: > Hi, > > i import a bitmap with 500x500 points with: > > Import["filename.bmp","Data"] > > > With ArrayPlot i can take a look at the image: > ArrayPlot[%] > > > Now i would like to rotate the image with an angle of for example > 12.1231 Degree... > > > How are you doing this? >
- References:
- Fast way to Rotate a bitmap in Mathematica 6.0
- From: olliH <oliver.hofherr@googlemail.com>
- Fast way to Rotate a bitmap in Mathematica 6.0