Revision 4578 trunk/libraries/libCq CMS for java.old/src/org/cresques/io/raster/RasterFilterStackManager.java
RasterFilterStackManager.java | ||
---|---|---|
61 | 61 |
typeFilters.put("computeminmax", new Integer(2)); |
62 | 62 |
typeFilters.put("tail", new Integer(3)); |
63 | 63 |
typeFilters.put("removebands", new Integer(4)); |
64 |
typeFilters.put("sharpening", new Integer(5)); |
|
65 | 64 |
init(); |
66 | 65 |
this.filterStack.setOrder(order); |
67 | 66 |
} |
... | ... | |
70 | 69 |
* Registra un manager del sistema |
71 | 70 |
* @param manager |
72 | 71 |
*/ |
73 |
protected void register(IStackManager manager) {
|
|
72 |
public void register(IStackManager manager) {
|
|
74 | 73 |
managers.add(manager); |
75 | 74 |
} |
76 | 75 |
|
... | ... | |
80 | 79 |
*/ |
81 | 80 |
protected void init() { |
82 | 81 |
order = new int[typeFilters.size()]; |
83 |
order[0] = ((Integer) typeFilters.get("sharpening")).intValue(); |
|
84 |
order[1] = ((Integer) typeFilters.get("computeminmax")).intValue();
|
|
85 |
order[2] = ((Integer) typeFilters.get("tail")).intValue();
|
|
86 |
order[3] = ((Integer) typeFilters.get("enhanced")).intValue();
|
|
87 |
order[4] = ((Integer) typeFilters.get("transparency")).intValue();
|
|
88 |
order[5] = ((Integer) typeFilters.get("removebands")).intValue();
|
|
82 |
//order[0] = ((Integer) typeFilters.get("sharpening")).intValue();
|
|
83 |
order[0] = ((Integer) typeFilters.get("computeminmax")).intValue();
|
|
84 |
order[1] = ((Integer) typeFilters.get("tail")).intValue();
|
|
85 |
order[2] = ((Integer) typeFilters.get("enhanced")).intValue();
|
|
86 |
order[3] = ((Integer) typeFilters.get("transparency")).intValue();
|
|
87 |
order[4] = ((Integer) typeFilters.get("removebands")).intValue();
|
|
89 | 88 |
} |
90 | 89 |
|
91 | 90 |
/** |
... | ... | |
93 | 92 |
* @param key Nombre del filtro |
94 | 93 |
* @param type Constante entera asignada a ese tipo |
95 | 94 |
*/ |
96 |
protected void addTypeFilter(String key, int type, int position) {
|
|
95 |
public void addTypeFilter(String key, int type, int position) {
|
|
97 | 96 |
typeFilters.put(key, new Integer(type)); |
98 | 97 |
|
99 | 98 |
int[] newOrder = new int[order.length + 1]; |
... | ... | |
116 | 115 |
* @return Tipo de filtro |
117 | 116 |
*/ |
118 | 117 |
public int getTypeFilter(String key) { |
119 |
return ((Integer) typeFilters.get(key)).intValue(); |
|
118 |
Integer value = ((Integer) typeFilters.get(key)); |
|
119 |
if(value != null) |
|
120 |
return value.intValue(); |
|
121 |
else |
|
122 |
return -1; |
|
120 | 123 |
} |
121 | 124 |
|
122 | 125 |
/** |
... | ... | |
346 | 349 |
|
347 | 350 |
this.controlTypes(); |
348 | 351 |
} |
349 |
|
|
350 |
/** |
|
351 |
* A?ade un filtro ComputeMinMax |
|
352 |
* @param files Ficheros que componen la imagen |
|
353 |
* @param i Posici?n de la imagen de refinado dentro de la lista de GeoRasterFile |
|
354 |
* @param order Orden de visualizado de las bandas RGB |
|
355 |
* @param alpha Alpha aplicado a toda la imagen |
|
356 |
* @param method M?todo de calculo del refinado |
|
357 |
* @param coef Coeficiente |
|
358 |
*/ |
|
359 |
public void addSharpeningFilter(GeoRasterFile[] files, int i, int[] order, int alpha, String method, double coef, int coefBrovey) { |
|
360 |
//Si ya hay un filtro de sharpening nos lo cargamos |
|
361 |
if (filterStack.isActive(((Integer) typeFilters.get("sharpening")).intValue())) { |
|
362 |
filterStack.removeFilter(((Integer) typeFilters.get("sharpening")).intValue()); |
|
363 |
} |
|
364 |
|
|
365 |
RasterFilter filtro = null; |
|
366 |
|
|
367 |
switch (filterStack.getDataTypeInFilter(((Integer) typeFilters.get("sharpening")).intValue())) { |
|
368 |
case RasterBuf.TYPE_IMAGE: |
|
369 |
filtro = new SharpeningImageFilter(); |
|
370 |
break; |
|
371 |
case RasterBuf.TYPE_SHORT: |
|
372 |
case RasterBuf.TYPE_USHORT: |
|
373 |
case RasterBuf.TYPE_INT: |
|
374 |
//filtro = new SharpeningShortFilter(); |
|
375 |
break; |
|
376 |
} |
|
377 |
|
|
378 |
if(filtro != null){ |
|
379 |
filtro.addParam("stats", filterStack.getStats()); |
|
380 |
filtro.addParam("pancromatica", new Integer(i)); |
|
381 |
filtro.addParam("files", files); |
|
382 |
filtro.addParam("order", order); |
|
383 |
filtro.addParam("alpha", new Integer(alpha)); |
|
384 |
filtro.addParam("method", method); |
|
385 |
filtro.addParam("coef", new Double(coef)); |
|
386 |
filtro.addParam("coefBrovey", new Integer(coefBrovey)); |
|
387 |
filterStack.addFilter(((Integer) typeFilters.get("sharpening")).intValue(),filtro); |
|
388 |
|
|
389 |
this.controlTypes(); |
|
390 |
} |
|
391 |
} |
|
392 | 352 |
|
393 | 353 |
/** |
394 | 354 |
* Obtiene de la pila el primer filtro del tipo solicitado si existe sino devuelve null |
... | ... | |
406 | 366 |
* @param rasterFilter Objeto RasterFilter del cual se quiere saber que tipo de filtro contiene |
407 | 367 |
* @return Tipo de filtro seg?n las constantes contenidas en RasterFilterStackManager |
408 | 368 |
*/ |
409 |
protected int getType(RasterFilter rasterFilter) { |
|
410 |
if (rasterFilter instanceof TransparencyFilter) { |
|
411 |
return 0; |
|
412 |
} |
|
369 |
public int getType(RasterFilter rasterFilter) { |
|
370 |
if (rasterFilter instanceof TransparencyFilter) |
|
371 |
return ((Integer)typeFilters.get("transparency")).intValue(); |
|
372 |
|
|
373 |
if (rasterFilter instanceof LinearEnhancementFilter) |
|
374 |
return ((Integer)typeFilters.get("enhanced")).intValue(); |
|
375 |
|
|
376 |
if (rasterFilter instanceof ComputeMinMaxFilter) |
|
377 |
return ((Integer)typeFilters.get("computeminmax")).intValue(); |
|
378 |
|
|
379 |
if (rasterFilter instanceof PercentTailTrimFilter) |
|
380 |
return ((Integer)typeFilters.get("tail")).intValue(); |
|
381 |
|
|
382 |
if (rasterFilter instanceof RemoveBandsFilter) |
|
383 |
return ((Integer)typeFilters.get("removebands")).intValue(); |
|
413 | 384 |
|
414 |
if (rasterFilter instanceof LinearEnhancementFilter) { |
|
415 |
return 1; |
|
416 |
} |
|
417 |
|
|
418 |
if (rasterFilter instanceof ComputeMinMaxFilter) { |
|
419 |
return 2; |
|
420 |
} |
|
421 |
|
|
422 |
if (rasterFilter instanceof PercentTailTrimFilter) { |
|
423 |
return 3; |
|
424 |
} |
|
425 |
|
|
426 | 385 |
return -1; |
427 | 386 |
} |
428 | 387 |
|
... | ... | |
433 | 392 |
* en el no coincidente. Esto es necesario ya que en la eliminaci?n de filtros puede |
434 | 393 |
* quedarse en inconsistencia de tipos. |
435 | 394 |
*/ |
436 |
protected void controlTypes() {
|
|
395 |
public void controlTypes() {
|
|
437 | 396 |
if (debug) { |
438 | 397 |
filterStack.show(); |
439 | 398 |
} |
... | ... | |
558 | 517 |
*/ |
559 | 518 |
public ArrayList getStringsFromStack() { |
560 | 519 |
filterList = new ArrayList(); |
561 |
|
|
562 | 520 |
for (int i = 0; i < filterStack.lenght(); i++) { |
563 | 521 |
RasterFilter rf = filterStack.get(i); |
564 | 522 |
|
... | ... | |
584 | 542 |
filterList.add("filter.removebands.active=true"); |
585 | 543 |
filterList.add("filter.removebands.bands=" + |
586 | 544 |
((RemoveBandsFilter) rf).bands); |
587 |
} else if (rf instanceof SharpeningFilter) { |
|
588 |
SharpeningFilter sharp = ((SharpeningFilter) rf); |
|
589 |
filterList.add("filter.pansharpening.active=true"); |
|
590 |
filterList.add("filter.pansharpening.posPancromatica="+sharp.posPancromatica); |
|
591 |
filterList.add("filter.pansharpening.bandOrder="+sharp.bandOrder[0]+","+sharp.bandOrder[1]+","+sharp.bandOrder[2]); |
|
592 |
for(int file=0;file<sharp.files.length;file++) |
|
593 |
filterList.add("filter.pansharpening.file"+file+"="+sharp.files[file].getName()); |
|
594 |
filterList.add("filter.pansharpening.method="+sharp.method); |
|
595 |
filterList.add("filter.pansharpening.coefHSL="+sharp.coef); |
|
596 |
filterList.add("filter.pansharpening.coefBrovey="+sharp.coefBrovey); |
|
597 |
filterList.add("filter.pansharpening.alpha="+sharp.alpha); |
|
598 | 545 |
} else { //Se recorren todos los managers registrados comprobando si corresponde a la clase del filtro |
599 |
|
|
600 |
for (int j = 0; j < managers.size(); j++) |
|
601 |
((IStackManager) managers.get(j)).getStringsFromStack(); |
|
546 |
System.out.println("...Manager registrado "+rf.getClass().getName()+" - "+managers.size()); |
|
547 |
for (int j = 0; j < managers.size(); j++){ |
|
548 |
filterList = ((IStackManager) managers.get(j)).getStringsFromStack(filterList, rf); |
|
549 |
} |
|
602 | 550 |
} |
603 | 551 |
} |
604 | 552 |
|
605 | 553 |
return filterList; |
606 | 554 |
} |
607 | 555 |
|
556 |
/* (non-Javadoc) |
|
557 |
* @see org.cresques.io.raster.StackManager#getStringsFromStack() |
|
558 |
*/ |
|
559 |
public ArrayList getStringsFromStack(ArrayList filterList, RasterFilter rf){ |
|
560 |
return null; |
|
561 |
} |
|
562 |
|
|
563 |
public int createStackFromStrings(String fil, ArrayList filters, int filteri){ |
|
564 |
return 0; |
|
565 |
} |
|
566 |
|
|
608 | 567 |
/** |
609 | 568 |
* Crea una pila de filtros a partir de un Array de Strings. Cada elemento del array debe |
610 | 569 |
* tener la forma elemento=valor. |
... | ... | |
640 | 599 |
if (fil.startsWith("filter.transparency.active") && |
641 | 600 |
getValue(fil).equals("true")) { |
642 | 601 |
filters.remove(filteri); |
643 |
|
|
644 |
int[][] r = null; |
|
645 |
int[][] g = null; |
|
646 |
int[][] b = null; |
|
647 | 602 |
|
648 | 603 |
ArrayList list = new ArrayList(); |
649 | 604 |
for (int propFilter = 0;propFilter < filters.size();propFilter++) { |
... | ... | |
745 | 700 |
} |
746 | 701 |
filteri = -1; |
747 | 702 |
} |
748 |
|
|
749 |
if (fil.startsWith("filter.pansharpening.active") && |
|
750 |
getValue(fil).equals("true")) { |
|
751 |
filters.remove(filteri); |
|
752 |
|
|
753 |
int posPancromatica = 0; |
|
754 |
int[] bandOrder = {0, 1, 2}; |
|
755 |
ArrayList files = new ArrayList(); |
|
756 |
int alpha = 0; |
|
757 |
String method = ""; |
|
758 |
double coef = 0D; |
|
759 |
int coefBrovey = 0; |
|
760 |
|
|
761 |
for (int propFilter = 0;propFilter < filters.size();propFilter++) { |
|
762 |
String elem = (String) filters.get(propFilter); |
|
763 |
|
|
764 |
if (elem.startsWith("filter.pansharpening.posPancromatica")) { |
|
765 |
posPancromatica = Integer.parseInt(getValue(elem)); |
|
766 |
filters.remove(propFilter); |
|
767 |
propFilter--; |
|
768 |
} |
|
769 |
if (elem.startsWith("filter.pansharpening.bandOrder")) { |
|
770 |
String rango = getValue(elem); |
|
771 |
bandOrder[0] = Integer.parseInt(rango.substring(0, rango.indexOf(","))); |
|
772 |
bandOrder[1] = Integer.parseInt(rango.substring(rango.indexOf(",") + 1, rango.lastIndexOf(","))); |
|
773 |
bandOrder[2] = Integer.parseInt(rango.substring(rango.lastIndexOf(",") + 1, rango.length())); |
|
774 |
filters.remove(propFilter); |
|
775 |
propFilter--; |
|
776 |
} |
|
777 |
if (elem.startsWith("filter.pansharpening.file")) { |
|
778 |
files.add(getValue(elem)); |
|
779 |
filters.remove(propFilter); |
|
780 |
propFilter--; |
|
781 |
} |
|
782 |
if (elem.startsWith("filter.pansharpening.alpha")) { |
|
783 |
alpha = Integer.parseInt(getValue(elem)); |
|
784 |
filters.remove(propFilter); |
|
785 |
propFilter--; |
|
786 |
} |
|
787 |
if (elem.startsWith("filter.pansharpening.method")) { |
|
788 |
method = getValue(elem); |
|
789 |
filters.remove(propFilter); |
|
790 |
propFilter--; |
|
791 |
} |
|
792 |
if (elem.startsWith("filter.pansharpening.coefHSL")) { |
|
793 |
coef = Double.parseDouble(getValue(elem)); |
|
794 |
filters.remove(propFilter); |
|
795 |
propFilter--; |
|
796 |
} |
|
797 |
if (elem.startsWith("filter.pansharpening.coefBrovey")) { |
|
798 |
coefBrovey = Integer.parseInt(getValue(elem)); |
|
799 |
//filters.remove(propFilter); |
|
800 |
//propFilter--; |
|
801 |
} |
|
802 |
} |
|
803 |
|
|
804 |
addSharpeningFilter(this.grfList, posPancromatica, bandOrder, alpha, method, coef, coefBrovey); |
|
805 |
filteri = -1; |
|
806 |
} |
|
807 | 703 |
|
808 | 704 |
for (int j = 0; j < managers.size(); j++) |
809 |
((IStackManager) managers.get(j)).createStackFromStrings(filters, new Integer(filteri));
|
|
705 |
filteri = ((IStackManager) managers.get(j)).createStackFromStrings(fil, filters, filteri);
|
|
810 | 706 |
|
811 | 707 |
filteri++; |
812 | 708 |
} |
... | ... | |
817 | 713 |
* @param cadena |
818 | 714 |
* @return |
819 | 715 |
*/ |
820 |
public String getElem(String cadena) { |
|
716 |
public static String getElem(String cadena) {
|
|
821 | 717 |
if (cadena != null) { |
822 | 718 |
return cadena.substring(0, cadena.indexOf("=")); |
823 | 719 |
} else { |
... | ... | |
830 | 726 |
* @param cadena |
831 | 727 |
* @return |
832 | 728 |
*/ |
833 |
public String getValue(String cadena) { |
|
729 |
public static String getValue(String cadena) {
|
|
834 | 730 |
if (cadena != null) { |
835 | 731 |
return cadena.substring(cadena.indexOf("=") + 1, cadena.length()); |
836 | 732 |
} else { |
... | ... | |
894 | 790 |
return null; |
895 | 791 |
} |
896 | 792 |
} |
793 |
|
|
794 |
/** |
|
795 |
* Obtiene la pila de filtros |
|
796 |
* @return RasterFilterStack |
|
797 |
*/ |
|
798 |
public RasterFilterStack getFilterStack() { |
|
799 |
return filterStack; |
|
800 |
} |
|
801 |
|
|
802 |
/** |
|
803 |
* Obtiene la Hashable que contiene los tipos de filtros registrados |
|
804 |
* @return Hashtable |
|
805 |
*/ |
|
806 |
public Hashtable getTypeFilters() { |
|
807 |
return typeFilters; |
|
808 |
} |
|
809 |
|
|
897 | 810 |
} |
Also available in: Unified diff