|
View:
New views
2 Messages
—
Rating Filter:
Alert me
|
|
|
Background SubtractionI'm new to JAI and am trying to implement a simple background subtraction algorithm for motion detection in a video stream.
I have a relatively fast (< 30ms/iteration) algorithm written using awt images: byte[] baseGreyPx = (byte[]) baseGreyImg.getRaster().getDataElements(0, 0, w, h, null ); byte[] greyPx = (byte[]) greyImg.getRaster().getDataElements(0, 0, w, h, null ); byte[] outPx = new byte[baseGreyPx.length]; for (int i=0; i<baseGreyPx.length; i++){ if (Math.abs(greyPx[i]-baseGreyPx[i]) < ((byte)((threshold << 24) >> 24 ))){ outPx[i] = Byte.MIN_VALUE; } else { outPx[i] = Byte.MAX_VALUE; } } diff = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_BINARY); diff.getRaster().setDataElements(0, 0, w, h, outPx); The algorithm above accepts two BufferedImages of TYPE_BYTE_GREY and outputs a one bit image, diff. I'm hoping to duplicate this functionality using JAI, but I'm getting poor results and am hoping for some advice. Here is my current code: RenderableImage grey = getRenderableFromBufferedImage(greyImg); RenderableImage base = getRenderableFromBufferedImage(baseGreyImg); ParameterBlock pb = new ParameterBlock(); pb.addSource(grey); pb.addSource(base); RenderableImage sub = JAI.createRenderable("subtract", pb); pb = new ParameterBlock(); pb.addSource(sub); RenderableImage abs = JAI.createRenderable("absolute", pb); pb = new ParameterBlock(); pb.addSource(abs); pb.add((double)threshold); RenderableImage thresh = JAI.createRenderable("binarize", pb); diff = ((PlanarImage)thresh.createDefaultRendering()).getAsBufferedImage(); [Message sent by forum member 'kngpengwin' (kngpengwin)] http://forums.java.net/jive/thread.jspa?messageID=356865 --------------------------------------------------------------------- To unsubscribe, e-mail: interest-unsubscribe@... For additional commands, e-mail: interest-help@... |
|
|
Re: Background SubtractionTry this
Let say u have 2 image..... which is img1 and img2.. first call the function img 3 = subtractImage(img1 , img2 ) then swap the parameter place img4 = subtractImage(img2, img1) now add both the images. private BufferedImage subtractImage(BufferedImage img1, BufferedImage img2) { BufferedImage imageOut; RenderedOp op = SubtractDescriptor.create(img1, img2, null); imageOut = op.getAsBufferedImage(); return imageOut; } [Message sent by forum member 'servantprint' (shadow_prinz@...)] http://forums.java.net/jive/thread.jspa?messageID=370699 --------------------------------------------------------------------- To unsubscribe, e-mail: interest-unsubscribe@... For additional commands, e-mail: interest-help@... |
| Free embeddable forum powered by Nabble | Forum Help |