Cockshott-Zachariah - Conservation Laws, Financial Entropy and the Eurozone Crisis.pdf
Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.
-
Upload
ariana-butler -
Category
Documents
-
view
240 -
download
3
Transcript of Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.
![Page 1: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/1.jpg)
Images In JavaPaul Cockshott
ALMA TADEMA RIVALES INCONSCIENTES 1893
![Page 2: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/2.jpg)
Introduction
• The AWT and how to put a simple image onto the screen
• Layout managers• The Jimage Class,
![Page 3: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/3.jpg)
Summary of this section
• At the end of this lecture you should have an idea of how to display a JPEG image on the screen, and how to load it into the Jimage class to carry out further image processing.
![Page 4: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/4.jpg)
Agenda
• AWT Images• Image Producers and Consumers• Jimage class• Pixel Representations• JPEG files
![Page 5: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/5.jpg)
Overview
• AWT abstract windows toolkit, supported by JavaSoft
• Operating system independent layer for windowing in Java
• Fiendishly obscure• Designed around requirements of images
being streamed off the web
![Page 6: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/6.jpg)
Connections
• Simple image display program to show how to display a JPEG file
• Pipeline model of image production• Jimages act as image consumers• Jimages allow arithmetic on image• Jimages provide output to AWT images
and JPEG
![Page 7: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/7.jpg)
How to display a picture 1
import java.awt.*;
import java.awt.image.*;
import java.util.*;
class JPEGshow extends Frame {
...
static public void main(String[] args) {
if (args.length == 1) new JPEGshow(args[0]);
else System.err.println("usage: java JPEGshow <image file>");
}
}
This is a standard Java Program class with a public static void main method
![Page 8: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/8.jpg)
Constructor for JPEGshow
JPEGshow(String filename) {
super("JPEG show Example");
add(
new ImageCanvas(getToolkit().getImage(filename) ),
BorderLayout.CENTER);
setSize(700, 540);
show();
}
See slide on these
Read in a JPEG file
Size of a frame
![Page 9: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/9.jpg)
The toolkit
• Each frame has associated with it a toolkit object the provides an interface to OS specific operations.
• CreateImage
• CreateMenu
• CreateLabel
• CreateMenuBar …. etc
![Page 10: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/10.jpg)
Roll your own ImageCanvas
class ImageCanvas extends Component {
Image image;
ImageCanvas(Image image)
{this.image = image;}
public void paint(Graphics g)
{ g.drawImage(image, 0, 0, this);}
}
Paint is called whenever a component must be shown,the Graphics object does the actual drawing, it has to bepassed in because it is what knows about physicallydrawing on the screen
Constructor just stores the image
![Page 11: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/11.jpg)
Image Class
• Pipeline flow model of image processing• Images are just tokens linking producers and
consumers
ImageImageProducer ImageConsumer
![Page 12: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/12.jpg)
ImageProducer Methods
• addConsumer(ImageConsumer ic) This method is used to register an ImageConsumer with the ImageProducer for access to the image data during a later reconstruction of the Image.
• removeConsumer(ImageConsumer ic) This method removes the given ImageConsumer object from the list of consumers currently registered to receive image data.
• startProduction(ImageConsumer ic) This method starts an immediate reconstruction of the image data
![Page 13: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/13.jpg)
ImageConsumer methods
• void setDimensions(int width, int height)
The dimensions of the source image are reported using the setDimensions method call.
• Void setPixels(int x, int y, int w, int h, ColorModel model, byte[] pixels, int off, int scansize)
The pixels of the image are delivered using one or more calls to the setPixels method.
![Page 14: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/14.jpg)
Image Class continued
ImageImageProducer ImageConsumer
Images contain a pointer to their producer which holds the actualdata for the image. This can be recovered using the getSource method. This allows a consumer to get at the pixel data ofan image by adding itself to the producer and starting production
Image.getSource
![Page 15: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/15.jpg)
Summary
• AWT is operating system independent• Streaming image model• Images as tokens• Producer - consumer pipeline• See chapters 6 of textbook
![Page 16: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/16.jpg)
Buffered Image Class
• Standard AWT images are just tokens for data streams.
• A BufferedImage actually contains the data.
Colour model Raster
BufferedImage
![Page 17: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/17.jpg)
JPEGCodec class
• This class has factory methods to create JPEG encoders and decoders:
• createJPEGDecoder(InputStream s)• createJPEGEncoder(OutputStream d)
![Page 18: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/18.jpg)
Read a BufferedImage
FileInputStream in = new FileInputStream(“myfile.jpg”);
JPEGImageDecoder dec= JPEGCodec.createJPEGDecoder(in);
BufferedImage im = decoder.decodeAsBufferedImage();
![Page 19: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/19.jpg)
getRGB
• You can access the pixels of a buffered image using
int getRGB(int x, int y)The default colour representation is:
alpha red green blue
Bit 0Bit 31
![Page 20: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/20.jpg)
Writing pixels
• This can be done with the setRGB method.
• This takes x, and y co-ordinates and a pixel encoded as a 32 bit integer
• im . setRGB(2, 5, 255);• Would set pixel 2,5 to 255 = bright blue.
![Page 21: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/21.jpg)
Creating sub images
• You can create a sub area within a buffered image using the
• public BufferedImage getSubimage(– int x, – int y,– int w,– int h);
Method of BufferedImage
![Page 22: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/22.jpg)
Jimage implements ImageConsumer
• Library of image processing classes developed in the department
• Available for student practicals• Algebraic rather than stream oriented• Interfaces to MMX hardware under
windows
![Page 23: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/23.jpg)
Algebraic orientation
By this we mean the it is structured around algebraic expressions whose values are images
Thus if and are images and is some operator then
is also an image
![Page 24: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/24.jpg)
Jimage operators
• Arithmetic J Universal plus(Universal)
• I-JUniversal minus(Universal)• I×JUniversal times(Universal)• I÷JUniversal divide(Universal) IUniversal abs()• Filtering• Jimage convolve(double[] k) convolve with symmetrical separable
kernel.• public abstract Jimage convolve(double[][] kernel)with non
separable kernel
![Page 25: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/25.jpg)
Scaling
• Jimage getScaledInstance(int nwidth, int nheight) This scales with bicubic interpolation.
• Jimage getScaledInstance(int nwidth, int nheight, int ndepth) This method allows the depth as well as area of an image to be altered if it is reduced the planes are aggregated if increased they are interpolated.
![Page 26: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/26.jpg)
More operations
Data accessint rgbpixel(int x,int y)
Converts the plane information into a pixel in the direct color model of java.
public abstract int upixel(int x, int y, int plane) - returns unsigned integer pixelpublic abstract float fpixel(int x, int y, int plane)
Returns the pixel in the range -1 to +1.
![Page 27: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/27.jpg)
Data Access
• public abstract void setPixel(int x,• int y,• int plane,• double pix)
– Pixel information in range -1 to +1• public void setSubImage(int x,• int y,• int z,• Jimage im)
– Update an area of an image with another one. The other one must not run off the edge of the one being written to. The source of the copying is the 0th plane of the source jimage.
![Page 28: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/28.jpg)
Jimage input output
• public void putJPEGImage(• java.lang.String fileName,• int quality)• throws java.io.IOException
– Outputs the image to a jpeg file• public boolean getImage(java.lang.String
fileName)– Initialise the Jimage from the specified file. The file
must be jpeg or gif.
![Page 29: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/29.jpg)
Jimage to AWT Image conversion
• public java.awt.Image getAWTImage()
• public java.awt.image.ImageProducer getProducer()
![Page 30: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/30.jpg)
Jimage implementations
J IM A G E C L A S S H IE R A R C H Y
In te lB Im ageR u n s b e st o n M M X
W ind ow s o n ly
C O M .C 3 D .IM A G EB yte Im age
G e ne ric Ja va
In te lIm ageR u n s b e st o n M M X
W ind o w s O n ly
C O M .C 3 D .IM A G ES ho r tIm a ge
G e ne ric Ja va
In te lF Im a geR u ns be s t o n P III
W ind o w s O n ly
C O M .C 3 D .IM A G EF loa tIm age
G e ne ric Ja va
C O M .C 3 D .IM A G EJ im a gea b s tra ct
![Page 31: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/31.jpg)
An example program
• class Jimageshow extends Frame {• Jimageshow(String filename) {• super("Jimage show Example");• Jimage raw=new ByteImage(100,200,3);• if (raw.getImage(filename)){• Jimage cooked = (Jimage)raw.times(0.3);• add(new ImageCanvas(cooked.getAWTImage()),
BorderLayout.CENTER);• setSize(700, 540);• show();• }• }
Create Jimage with byte pixels
Multiply by 0.3
Convert to AWTfor display
![Page 32: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/32.jpg)
Pixel Representations
When dealing with displays it is conventional to assume that pixels are bytes holding numbers in the range 0 to 255.
0 Is assumed to be black
1 Is assumed to be white or maximum brightness of any given colour.
For multicolour displays with 3 colour components, the convention is to have 3 fields of range 0..255 to hold the colour information.
![Page 33: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/33.jpg)
Pixel Representations AWT
For multicolour displays with 3 colour components, the convention is to have 3 fields of range 0..255 to hold the colour information. The AWT does this with the class Color.
• public Color(int rgb)– Creates a color with the specified RGB value, where the
red component is in bits 16-23 of the argument, the green component is in bits 8-15 of the argument, and the blue component is in bits 0-7. The value zero indicates no contribution from the primary color component.
– A Jimage returns this format with int rgbpixel().
![Page 34: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/34.jpg)
Pixel Representations: Bytes
The byte data type in Java does not take on the values 0..255. Instead it takes on the values -128 to 127.
There are no unsigned bytes in Java.
This creates a problem for the representation of pixels in Jimages.
The solution adopted is to adopt the following representation
• -128 = black
• 0 = mid grey
• 127 = white
![Page 35: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/35.jpg)
Pixel Representations: Floats
If byte pixels are signed then so must other representations be.
The solution adopted is to adopt the following representation for floats
• -1 = black
• 0 = mid grey
• 1 = white
![Page 36: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/36.jpg)
Conversions between representations
unsigned bytes shorts float min value 0 -128 -2048 -1
maxval 255 127 2047 1
medianval 127.5 -0.5 -0.5 0
range 255 255 4095 2
As shown in table a pixel in representationis converted to a pixel in representation by the operation:
![Page 37: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/37.jpg)
Signed Pixels : advantages
Signed pixels seem at first to be counter-intuitive but they have numerous advantages.
• A value of 0 or mid grey can be viewed as the ‘most likely’ value that a pixel takes on in the absence of other information.
• If you do arithmetic on images, in particular subtract one image from another, then negative values of pixels naturally arise.
• Signed pixels allow straightforward implementation of contrast adjustments. For instance multiplying an image by 0.5 halves the contrast in the image.
![Page 38: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/38.jpg)
Signed Pixels : contrast adjustment
Signed pixels allow straightforward implementation of contrast adjustments. For instance multiplying an image by 0.5 halves the contrast in the image.
0.5
1
-1
0.5
Initial contrast rangeFinalcontrastrange
0.5
-0.5
0.25
-0.25
![Page 39: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/39.jpg)
Image Multiplication
![Page 40: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/40.jpg)
Image Addition
![Page 41: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/41.jpg)
Image subtraction
![Page 42: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/42.jpg)
What Is Convolution
• Convolution takes a kernel of coefficients and multiplies each pixel in a neighbourhood by the corresponding coefficient, and then sums the result
x y p[I+x, j+y]*k[x,y]
• Will give the convolved pixel at position i, j
![Page 43: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/43.jpg)
1 D convolution
• A 1 D convolution takes a one dimensional array as a kernel and applies it first in the X and then in Y dimension.
• This can often be performed faster than a 2d convolution
![Page 44: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/44.jpg)
Image Convolution: smoothing
double[] k= {0.1,0.1,0.2,0.2,0.2,0.1,0.1};
marble.convolve(k)=
marble =
Note sum ofcoefficients =1
![Page 45: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/45.jpg)
Image Convolution: sharpening
double[] k= {-0.3,1.6,-0.3}
marble.convolve(k)=
marble =
Note sum ofcoefficients =1number terms is odd
![Page 46: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/46.jpg)
Convolution in Java2D
• Java 2D provides a standard library for convolution of buffered images
• This uses the class Kernel and ConvolveOp
![Page 47: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/47.jpg)
Kernels in JAVA 2D
float[] blur={ 0.0f, 0.1f, 0.0f, 0.1f, 0.6f, 0.1f,
0.0f, 0.1f, 0.1f};
Kernel k= new Kernel(3,3, blur);
im = new ConvolveOp(K).filter(im,null);
This will blur the image im by applying the 3 by 3 kernel blur to it.
![Page 48: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/48.jpg)
Importance of speed
• Image may contain a million pixels, • Arithmetic may be required on each one• Important to optimise operations or they
are very time consuming• May need to use assembler kernels• May need to use special purpose
instructions
![Page 49: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/49.jpg)
Multimedia Extensions MMX
• Intel and other CPU manufacturers have been adding to the instruction sets of their computers new extensions that handle multi-media data.
• The aim is to allow operations to proceed on multiple pixels each clock cycle
![Page 50: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/50.jpg)
MMX 2
• Standard Intel register set
eaxebxecxedxespebpesiedi
8 General Registers 8 floating point registers
32 bit 64 bit
fp0fp1fp2fp3fp4fp5fp6fp7
![Page 51: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/51.jpg)
MMX 3
• Standard Intel register set operating in MMX mode
eaxebxecxedxespebpesiedi
8 General Registers 8 multimedia registers
32 bit 64 bit
mm0mm1mm2mm3mm4mm5mm6mm7
![Page 52: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/52.jpg)
MMX 4 motivation
• Existing operating systems must still work unchanged
• Applications not using MMX run unchanged
• No new state added to the CPU
Hence, shared use of the FP registers, since these are already supported by exising OS’s
![Page 53: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/53.jpg)
MMX data formats
One 64bit integer QUADWORD
Two 32 bit integer DOUBLEWORDS
Four 16 bit WORDS
Eight 8 bit BYTES
![Page 54: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/54.jpg)
Problem of overflows
• A problem with limited precision arithmetic is that overflows frequently occur. This can give rise to meaningless results: consider
• 200+175 = 375 but in 8 bit binary
11001000
+10101111
=101110111Leading 1 is discarded
This leaves an answer of 119 decimal – clearly wrong
![Page 55: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/55.jpg)
Using saturation
• You can fix this by using conditionalsunsigned char p1,p2,p3;
int I3= (int)p1 + (int)p2;
p3=(I3>255?255:(unsigned char)I3);
![Page 56: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/56.jpg)
Expansion of the code 1
12: j=(int)(*p1++)+(int)(*p2++);00401043 mov ecx,dword ptr [ebp-4]00401046 xor edx,edx00401048 mov dl,byte ptr [ecx]0040104A mov eax,dword ptr [ebp-8]0040104D xor ecx,ecx0040104F mov cl,byte ptr [eax]00401051 add edx,ecx00401053 mov dword ptr [ebp-14h],edx00401056 mov edx,dword ptr [ebp-8]00401059 add edx,10040105C mov dword ptr [ebp-8],edx0040105F mov eax,dword ptr [ebp-4]00401062 add eax,100401065 mov dword ptr [ebp-4],eax
![Page 57: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/57.jpg)
Expansion 2
13:14: *p3 = (unsignedchar)(j>255?255:j);00401068 cmp dword ptr [ebp-14h],0FFh0040106F jle main+6Ah (0040107a)00401071 mov dword ptr [ebp-18h],0FFh00401078 jmp main+70h (00401080)0040107A mov ecx,dword ptr [ebp-14h]0040107D mov dword ptr [ebp-18h],ecx00401080 mov edx,dword ptr [ebp-0Ch]00401083 mov al,byte ptr [ebp-18h]00401086 mov byte ptr [edx],al15: p3++;00401088 mov ecx,dword ptr [ebp-0Ch]0040108B add ecx,10040108E mov dword ptr [ebp-0Ch],ecx
Total of 26 instructions in the kernel
![Page 58: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/58.jpg)
Alternative using mmx
• Iu8vec8 *v1,*v2,*v3;• int i,j,k;• for(i=0;i<31;i++){• *v3=(*v1++)+(*v2++);• v3++;• }• _mm_empty();
Type represents 8 by 8bit integers
Arithmetic on 8 bytes at a time
Indicates MMX regs are now free
![Page 59: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/59.jpg)
Optimised Assembler Loop
mov ecx ,32 ; load counter with 32
l1: movq mm0,[esi] ; load 8 bytes
add esi,8 ; inc src pntr
paddusb mm0,[edx] ; packed unsigned add bytes
add edx,8 ; inc src pntr
movq [edi],mm0 ; store 8 byte result
add edi,8 ; inc dest pntr
loop nz,l1 ; dec counter,
; repeat non zero
Go round only 32 times not 256
Total of 6 instructions in kernel
![Page 60: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/60.jpg)
Speed Gain
• On image of 256x256 pixels • Old C code executes 26*256*256
instructions = 1,703,936 instructions• Optimised mmx code executes 6*256*32
instructions = 49,152• Note that no compiler currently will give
the optimised code. It has to be hand assembled.
![Page 61: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/61.jpg)
Image Processing Library
• Intel Provide an image porcessing library that can be downloaded from their web site.
• It provides efficient access to the MMX hardware.
• It provides frequently used Image Processing Operations.
• It requires a set of DLLs in your path to run
![Page 62: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/62.jpg)
Image Processing Library 2
At the core of IPL is the ability to write to a single API and get the best possible results for any Intel processor. The libraries have as many as six processor-specific branches for each function and six sets of carefully written assembly code, but only one entry point to each function.
![Page 63: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/63.jpg)
Image Processing Library 3
![Page 64: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/64.jpg)
Image Processing Library 4
• Use of Intel IPL complex and requires C• I have provided 2 java classes that call the IPL.• IntelBImage and IntelFImage. These are
documented in the Jimage web pages. They inherit from ByteImage and FloatImage
• To use them the Intel IPL must have been installed on your machine and be on the path.
• If you are forced to use Unix machines the libraries will not be available to you.
![Page 65: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/65.jpg)
Where to get more information
• http://www.javasoft.com/products/jdk/1.2/docs/api/java/awt/package-summary.html
• http://developer.intel.com/vtune/perflibst/ipl/index.htm
• http://developer.intel.com/vtune/perflibst/ipl/ipapi.htm
![Page 66: Images In Java Paul Cockshott ALMA TADEMA RIVALES INCONSCIENTES 1893.](https://reader033.fdocuments.in/reader033/viewer/2022061611/5515ca43550346a3758b4abc/html5/thumbnails/66.jpg)
Feedback
• What did you not understand here?• What would you like more information on?