package fr.unistra.pelican.demos.applied.video; import fr.unistra.pelican.DoubleImage; import fr.unistra.pelican.Image; import fr.unistra.pelican.PelicanException; import fr.unistra.pelican.algorithms.applied.video.caption.ColorDetector; import fr.unistra.pelican.algorithms.applied.video.caption.EdgeDensityDetector; import fr.unistra.pelican.algorithms.applied.video.caption.EdgeRegularityDetector; import fr.unistra.pelican.algorithms.applied.video.caption.TextureDetector; import fr.unistra.pelican.algorithms.arithmetic.LinearCombination; import fr.unistra.pelican.algorithms.conversion.RGBToGray; import fr.unistra.pelican.algorithms.geometric.BlockResampling2D; import fr.unistra.pelican.algorithms.io.MultipleImageLoad; import fr.unistra.pelican.algorithms.morphology.binary.BinaryClosing; import fr.unistra.pelican.algorithms.morphology.binary.BinaryOpening; import fr.unistra.pelican.algorithms.segmentation.ManualThresholding; import fr.unistra.pelican.algorithms.visualisation.Viewer2D; import fr.unistra.pelican.util.morphology.FlatStructuringElement2D; public class CaptionDetectionDemo { /** * @param args */ public static void main(String[] args) throws PelicanException { Image decisions[]=new Image[4]; double visible=1.0/decisions.length; Double coefficients [] = new Double[decisions.length]; java.util.Arrays.fill(coefficients,visible); int w=12; int h=4; long t1=System.currentTimeMillis(); String path="/home/lefevre/data/sample3"; Image video = MultipleImageLoad.exec(path,new Integer(Image.T)); Image gray=RGBToGray.exec(video); Viewer2D.exec(video,"Sequence"); // Texture detector Image texture=TextureDetector.exec(gray,w,h,30,0.1); Viewer2D.exec(BlockResampling2D.exec(texture,w,h,true),"texture"); decisions[0]=texture; // Edge density detector Image density=EdgeDensityDetector.exec(gray,w,h,200,0.25); Viewer2D.exec(BlockResampling2D.exec(density,w,h,true),"density"); decisions[1]=density; // Edge regularity detector Image regularity=EdgeRegularityDetector.exec(gray,w,h,200,0.5,1,0.3); Viewer2D.exec(BlockResampling2D.exec(regularity,w,h,true),"regularity"); decisions[2]=regularity; // Color detector Image color=ColorDetector.exec(video,w,h,20,0.15); Viewer2D.exec(BlockResampling2D.exec(color,w,h,true),"color"); decisions[3]=color; // Fusion of detectors Image result=LinearCombination.exec(decisions,coefficients); Viewer2D.exec(BlockResampling2D.exec(((DoubleImage)result).scaleToZeroOne(),w,h,true),"scores"); // Post-processing result=ManualThresholding.exec(result,2.0*visible); Viewer2D.exec(BlockResampling2D.exec(result,w,h,true),"threshold"); result=BinaryClosing.exec(result,FlatStructuringElement2D.createSquareFlatStructuringElement(3)); result=BinaryOpening.exec(result,FlatStructuringElement2D.createRectangularFlatStructuringElement(3,5)); // Final result Viewer2D.exec(BlockResampling2D.exec(result,w,h,true),"final result"); long t2=System.currentTimeMillis()-t1; System.out.println("Demo terminee : "+ (t2/1000) + " secondes"); } }