package test.lbp;
import java.util.List;
import java.util.concurrent.TimeUnit;
import junit.framework.TestCase;
import com.akjava.gwt.lib.client.experimental.lbp.BinaryPattern;
import com.akjava.gwt.lib.client.experimental.lbp.SimpleLBP;
import com.google.common.base.Joiner;
import com.google.common.base.Stopwatch;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.primitives.Ints;
public class LBPTest extends TestCase {
public void testSimple(){
int[][] ints=new int[4][4];
ints[1][1]=128;
ints[2][2]=128;
SimpleLBP lbp=new SimpleLBP(true,1);
int[][] converted=lbp.convert(ints);
System.out.println("input");
for(int i=0;i<ints.length;i++){
String result=Joiner.on(",").join(Ints.asList(ints[i]));
System.out.println(result);
}
System.out.println("converted");
for(int i=0;i<converted.length;i++){
String result=Joiner.on(",").join(Ints.asList(converted[i]));
System.out.println(result);
}
int[] retInt=BinaryPattern.dataToBinaryPattern(converted,2,2,2);
List<Integer> lists=Ints.asList(retInt);
List<List<Integer>> p=Lists.partition(lists, 8);
System.out.println("binary");
for(List<Integer> ints2:p){
String result=Joiner.on(",").join(ints2);
System.out.println(result);
}
}
/*
* test step by step and direct same
*/
public void testSame1(){
int[][] ints=new int[4][4];
ints[1][1]=128;
ints[2][2]=128;
SimpleLBP lbp=new SimpleLBP(true,1);
int[][] converted=lbp.convert(ints);
int[] retInt=BinaryPattern.dataToBinaryPattern(converted,2,2,2);
List<Integer> lists=Ints.asList(retInt);
String lbpPlutBinaryPattern=Joiner.on(",").join(lists);
String direct=Joiner.on(",").join(Ints.asList(lbp.dataToBinaryPattern(ints, 2, 2)));
assertEquals(lbpPlutBinaryPattern, direct);
}
public void testBench(){
Stopwatch watch1=Stopwatch.createUnstarted();
Stopwatch watch2=Stopwatch.createUnstarted();
for(int k=0;k<100;k++){
int[][] ints=new int[36][36];
for(int i=0;i<36;i++){
for(int j=0;j<36;j++){
int v=(int) (256*Math.random());
ints[i][j]=v;
}
}
SimpleLBP lbp=new SimpleLBP(true,2);
watch1.start();
int[][] converted=lbp.convert(ints);
int[] retInt=BinaryPattern.dataToBinaryPattern(converted,2,4,4);
List<Integer> lists=Ints.asList(retInt);
String lbpPlutBinaryPattern=Joiner.on(",").join(lists);
watch1.stop();
watch2.start();
String direct=Joiner.on(",").join(Ints.asList(lbp.dataToBinaryPattern(ints, 4, 4)));
watch2.stop();
if(!lbpPlutBinaryPattern.equals(direct)){
fail();
}
}
System.out.println("convine:"+watch1.elapsed(TimeUnit.MILLISECONDS)+",direct:"+watch2.elapsed(TimeUnit.MILLISECONDS));
}
public void testSame2(){
int[][] ints=new int[36][36];
for(int i=0;i<36;i++){
for(int j=0;j<36;j++){
int v=(int) (256*Math.random());
ints[i][j]=v;
}
}
SimpleLBP lbp=new SimpleLBP(true,2);
int[][] converted=lbp.convert(ints);
int[] retInt=BinaryPattern.dataToBinaryPattern(converted,2,4,4);
List<Integer> lists=Ints.asList(retInt);
String lbpPlutBinaryPattern=Joiner.on(",").join(lists);
String direct=Joiner.on(",").join(Ints.asList(lbp.dataToBinaryPattern(ints, 4, 4)));
assertEquals(lbpPlutBinaryPattern, direct);
}
public void testBinary3x3(){
int[][] ints=new int[3][3];
ints[1][1]=128;
SimpleLBP lbp=new SimpleLBP(true,1);
int[][] converted=lbp.convert(ints);
int[] retInt=BinaryPattern.dataToBinaryPattern(converted,3,0,0);
assertEquals(9*8, retInt.length);
String result=SimpleLBP.toBinaryPatternToDebug(retInt,3,3);
System.out.println(result);
List<Integer> lists=Ints.asList(retInt);
}
/*
* put center not changed
*/
public void testBinary3x3Horizontal(){
int[][] ints=new int[3][3];
ints[0][1]=128;
SimpleLBP lbp=new SimpleLBP(true,1);
int[][] converted=lbp.convert(ints);
int[] retInt=BinaryPattern.dataToBinaryPattern(converted,3,0,0);
//System.out.println("#before");
//System.out.println(SimpleLBP.toBinaryPatternToDebug(retInt,3,3));
String correct=Joiner.on("\n").join(ImmutableList.of(
"1 block:0x0 E=1",
"2 block:1x0 ",
"3 block:2x0 W=1",
"4 block:0x1 NE=1",
"5 block:1x1 N=1",
"6 block:2x1 NW=1",
"7 block:0x2 ",
"8 block:1x2 ",
"9 block:2x2 "));
int[] flipped=SimpleLBP.flipHorizontal(retInt, 3, 3);
String result=SimpleLBP.toBinaryPatternToDebug(flipped,3,3);
assertEquals(correct, result);
}
/*
* put center not changed
*/
public void testBinary3x3Horizontal2(){
int[][] ints=new int[3][3];
ints[0][0]=128;
SimpleLBP lbp=new SimpleLBP(true,1);
int[][] converted=lbp.convert(ints);
int[] retInt=BinaryPattern.dataToBinaryPattern(converted,3,0,0);
System.out.println("#before");
//System.out.println(SimpleLBP.toBinaryPatternToDebug(retInt,3,3));
/*
1 block:0x0
2 block:1x0 W=1
3 block:2x0
4 block:0x1 N=1
5 block:1x1 NW=1
6 block:2x1
7 block:0x2
8 block:1x2
9 block:2x2
*/
String correct=Joiner.on("\n").join(ImmutableList.of(
"1 block:0x0 ",
"2 block:1x0 E=1",
"3 block:2x0 ",
"4 block:0x1 ",
"5 block:1x1 NE=1",
"6 block:2x1 N=1",
"7 block:0x2 ",
"8 block:1x2 ",
"9 block:2x2 "));
int[] flipped=SimpleLBP.flipHorizontal(retInt, 3, 3);
String result=SimpleLBP.toBinaryPatternToDebug(flipped,3,3);
assertEquals(correct, result);
}
}