package dokumenty; import java.io.File; import pl.wroc.pwr.image.IGSImage; import pl.wroc.pwr.image.IRGBImage; import pl.wroc.pwr.image.converter.RGBtoGSConverter; import pl.wroc.pwr.image.io.GenericLoader; import pl.wroc.pwr.image.io.GenericSaver; import pl.wroc.pwr.image.model.RGBImage; import pl.wroc.pwr.imagechannel.IImageChannel; import pl.wroc.pwr.imagechannel.basic.AddChannel; import pl.wroc.pwr.imagechannel.basic.Invert; import pl.wroc.pwr.imagechannel.basic.Limit; import pl.wroc.pwr.imagechannel.basic.Normalize; import pl.wroc.pwr.imagechannel.basic.SubtractChannel; import pl.wroc.pwr.imagechannel.basic.Threshold; import pl.wroc.pwr.imagechannel.filter.ConvolutionOperator; import pl.wroc.pwr.imagechannel.filter.Mask; public class DetektorTabel { private ConvolutionOperator detektorPoziomy = null; private ConvolutionOperator detektorPionowy = null; private SubtractChannel odejmowanie = new SubtractChannel(); private AddChannel dodawanie = new AddChannel(); private Limit ograniczanie = new Limit(); public DetektorTabel() { this.detektorPoziomy = new ConvolutionOperator(this.maskaPozioma()); this.detektorPionowy = new ConvolutionOperator(this.maskaPionowa()); } private Mask maskaPozioma() { Mask mask = new Mask(5); for (int x = 0; x < 5; x++) { for (int y = 0; y < 5; y++) { mask.setValue(x, y, (y != 2) ? -1 : 4); } } return mask; } private Mask maskaPionowa() { Mask mask = new Mask(5); for (int x = 0; x < 5; x++) { for (int y = 0; y < 5; y++) { mask.setValue(x, y, (x != 2) ? -1 : 4); } } return mask; } private IImageChannel usunLinie(IImageChannel kanal) { IImageChannel poziom = this.detektorPoziomy.apply(kanal); poziom = new Normalize().apply(poziom); //poziom = new Threshold(poziom, 7f).apply(); IImageChannel pion = this.detektorPionowy.apply(kanal); pion = new Normalize().apply(pion); //pion = new Threshold(pion, 7f).apply(); IImageChannel linie = this.dodawanie.apply(poziom, pion); //linie = this.ograniczanie.apply(linie); return poziom; /*IImageChannel bezLinii = this.odejmowanie.apply(kanal, poziom); bezLinii = this.odejmowanie.apply(bezLinii, pion); bezLinii = this.ograniczanie.apply(bezLinii); return bezLinii;*/ } public boolean czyTabela(IImageChannel kanal) { IImageChannel poziom = this.detektorPoziomy.apply(kanal); IImageChannel pion = this.detektorPionowy.apply(kanal); IImageChannel bezLinii = this.odejmowanie.apply(kanal, poziom); bezLinii = this.odejmowanie.apply(bezLinii, pion); bezLinii = this.ograniczanie.apply(bezLinii); return false; } public static void main(String[] args) { IRGBImage img = new GenericLoader("/home/mariusz/dane/nekst/dokumenty/4.png").apply(); IGSImage gs = new RGBtoGSConverter(img).apply(); DetektorTabel detektor = new DetektorTabel(); IImageChannel c = detektor.usunLinie(new Invert(gs.getGrayChannel()).apply()); IRGBImage out = new RGBImage(c, c, c); new GenericSaver(out, new File("/home/mariusz/dane/nekst/wyniki/l.png")).apply(); } }