The Fourier image filtering page is an online demonstration of image filtering in the frequency domain. Upload your image and its 2D FFT frequency domain transform is shown. Draw on the FFT image using the rectangle, line or circle/arc tools (use the tool inverse to remove drawn areas) to remove certain frequencies then back transform using iFFT and view the filtered image.
Ejectamenta puzzles now as apps on Facebook
I am working on getting MegaTangram and Hexpac also on Facebook as apps and am working on functionality for sharing and swapping puzzles between friends at the moment. Here is a picture of how MegaTangram is looking at the moment (link not working at present as app in sandbox mode).
Tutorial using Matlab to show how to perform transforms in 3D from one coordinate system to another
For real world vision or Robotic operations it is sometimes necessary to transform between coordinates in different coordinate systems. In this tutorial we will transform a 3D spiral from one coordinate system to another. The coordinate systems are specified in terms of their position in Cartesian space and converted to a vectorial representation.
First let us create and display the spiral
t = 0:pi/50:10*pi;
st = sin(t);
ct = cos(t);
The spiral is in 3D but we need a 4D matrix to perform the matrix transformations, so we also add a row of ones to it
spiral = [st; ct; t; ones(501,1)']
Ok, lets plot the relevant data
plot3(spiral(1,:), spiral(2,:), spiral(3,:), 'b')
we use the hold on command to keep plotting to the same chart
hold on
We are going to translate this spiral from its world coordinates to another local coordinate system
the coordinates are specified by a matrix = [X1, X2, X3, Y1, Y2, Y3, Z1, Z2, Z3]
world = [1,0,0;0,1,0;0,0,1]
local = [3,6,3;3,3,6;3,3,0]
The 3,3,0 in the last row (Z axis) of the matrix creates a 45 degree plane
Lets turn our local coordinate system into a vector
local_vector = zeros(3,3)
local_vector(:,1) = local(:,2)-local(:,1)
local_vector(:,2) = local(:,3)-local(:,1)
local_vector(:,3) = cross(local_vector(:,1),local_vector(:,2))
The vectors should be normalised to unit length like our world vector is
local_vector(:,1) = local_vector(:,1)/norm(local_vector(:,1))
local_vector(:,2) = local_vector(:,2)/norm(local_vector(:,2))
local_vector(:,3) = local_vector(:,3)/norm(local_vector(:,3))
Now we have to create our transform matrix using the dot product between our world and local vectors, this sets up the skew, reflection, rotation elements
transform = zeros(4,4)
transform(1,1) = dot(world(1,:), local_vector(1,:))
transform(1,2) = dot(world(1,:), local_vector(2,:))
transform(1,3) = dot(world(1,:), local_vector(3,:))
transform(2,1) = dot(world(2,:), local_vector(1,:))
transform(2,2) = dot(world(2,:), local_vector(2,:))
transform(2,3) = dot(world(2,:), local_vector(3,:))
transform(3,1) = dot(world(3,:), local_vector(1,:))
transform(3,2) = dot(world(3,:), local_vector(2,:))
transform(3,3) = dot(world(3,:), local_vector(3,:))
we also add the translated origin of our coordinate system to the last column of the matrix, this performs the X,Y,Z translation
transform(1,4) = local(1,1)
transform(2,4) = local(2,1)
transform(3,4) = local(3,1)
transform(4,4) = 1
So using our transform we can rotate the spiral by 45 degrees and translate it by 3 in X and 3 in Y
tspiral = transform*spiral;
let’s plot it in green next to the original spiral
plot3(tspiral(1,:), tspiral(2,:), tspiral(3,:), 'g')
(you might want to rotate the plot axis now to see the two spirals in 3D)
now to get it back again we use the inverse of our transformation matrix
tunspiralInv = inv(transform)*tspiral;
and plot it using markers so we can see the orginal spiral beneath
plot3(tunspiralInv(1,:), tunspiralInv(2,:), tunspiralInv(3,:), ‘r*’)
The plot should look like this
For the mathematical details behind the transform, these MIT lecture notes provide an excellent explanation.
If you find the article useful, please feel free to post a link to it
Code2HTML web tool
Code2HTML is a webtool that allows you to convert computer code into a form suitable for webpages. Its a basic cut and paste job. It also colour convert /* */ style comments and encloses with “pre” and “code” html tags for correct displaying. Here you can see an example of converted php/smarty code .
Chemical Music: now at lower frequency audio
Animated gif of a wrestling scene created from an Egyptian mural
I made this animated gif from a wrestling scene from an Egyptian mural approximately 4000 years old, found in the tomb of Khnumhotep. It is the earliest known animation sequence
Colour your tangrams, user tangrams, or mosaic designs using the colour chooser control
On the bottom left of the tangram screen is a new colour chooser control. By clicking on this control different colours can be selected. By changing the scale control the brightness of the colours can also be changed. Once you find a colour that you like you can change the colour of the tangram shape by clicking on one of the shape types. You can also change the colour of the background by clicking on the background. By using different coloured pieces in the user tangram mode interesting mosaic designs can be created such as shown beloram mosaic”>
By first clicking on the colour chooser and releasing the mouse button on the tangram piece (equivalent to dragging a colour from the colour chooser to a piece) each tangram piece in play can be individually coloured. The image below shows an example of individually coloured pieces used in a pattern.
To remove the colour from a piece click on the piece and release the mouse button on the puzzle area background. Setting the colour of an individual piece overrides the colour setting for the piece type. To restore the colour for the piece type remove the individual colour. If the piece type colour is removed, the colour of the piece type defaults to grey.
User tangram puzzles can now be saved and viewed in the user home page area
The user home page is a place where you can view all your completed puzzles. The tangram puzzle now has the ability to create your own tangram puzzles using unlimited amounts of the 7 tangram building block pieces.
To do this just click on the user tangram button in the top right corner of the
MegaTangram screen and start building your tangram design. To save your user tangram click the button again. The new puzzle will be added to the user home page and also shown in the completed puzzle area on the top of the puzzle screen.
Full screen mode
The MegaTangram puzzle has a full screen mode that can be started by clicking on the full screen button. Clicking again on the button goes back to normal webpage mode (in Firefox you may need to use the escape key, on Opera by right clicking it can be found as a menu option).
Full screen mode has been tested and is working well using Google Chrome, Firefox and Opera (12.1) web browsers, it is untested on safari but should work, to my knowledge fullscreen mode is not supported by internet explorer browsers.
Unfortunately for those with iPads and Android tablets, the fullscreen API is not supported on mobile browsers is not supported to my knowledge, however since the webpage resizes to suit the browser page width you can anyway get close to full screen size.
more information on full-screen support can be found here
Construct your own tangram picture using as many shapes as needed
By clicking on the user tangram button a tangram picture can be designed. As many shapes as needed can be dragged from the bottom of the screen into the puzzle area to use making a pattern or picture. Zoom in and out and move the canvas around to give yourself more space in which to build. User tangrams can be seen on the user home page as well as in the MegaTangram game