2009-11-09 10 views
0

Je souhaite appliquer un filtre médian à une image à deux niveaux et générer une image à deux niveaux. Le filtre médian JAI semble produire une image RVB, que j'ai du mal à convertir à deux niveaux.Médian Filtrer une image à deux niveaux avec JAI

même Actuellement je ne peux pas obtenir l'image en arrière couleur gris espace, mon code ressemble à ceci:

BufferedImage src; // contains a bi-level image 

ParameterBlock pb = new ParameterBlock(); 
pb.addSource(src); 
pb.add(MedianFilterDescriptor.MEDIAN_MASK_SQUARE); 
pb.add(3); 
RenderedOp result = JAI.create("MedianFilter", pb); 

ParameterBlock pb2 = new ParameterBlock(); 
pb2.addSource(result); 
pb2.add(new double[][]{{0.33, 0.34, 0.33, 0}}); 
RenderedOp grayResult = JAI.create("BandCombine", pb2); 

BufferedImage foo = grayResult.getAsBufferedImage(); 

Ce code se bloque sur la ligne de grayResult et ne semble pas revenir. Je suppose que je devrai éventuellement appeler l'opération "Binarize" dans JAI. Edit: En fait, le code semble bloquer une fois que j'appelle getAsBufferedImage(), mais revient presque instantanément lorsque la deuxième opération ("BandCombine") est supprimée.

Existe-t-il un meilleur moyen de conserver le filtrage médian dans le domaine de couleurs source? Si non, comment puis-je redescendre en binaire?

Répondre

0

Malheureusement, il semble que l'opération BandCombine ne se comporte pas comme prévu ici. La tactique appropriée pour retourner à l'école primaire est d'utiliser une palette de ColorConvertOp - ce qui permet d'utiliser l'opération MedianFilter qui (malheureusement) mènera toujours à une image RVB.