/*
* Copyright (c) 2011-2016, Peter Abeles. All Rights Reserved.
*
* This file is part of BoofCV (http://boofcv.org).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package boofcv.misc;
import boofcv.struct.ImageRectangle;
import boofcv.struct.image.GrayU8;
import boofcv.struct.image.ImageGray;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @author Peter Abeles
*/
public class TestBoofMiscOps {
@Test
public void boundRectangleInside() {
GrayU8 image = new GrayU8(20,25);
checkBound(-2,-3,5,6,0,0,5,6,image);
checkBound(16,15,22,26,16,15,20,25,image);
checkBound(0,0,20,25,0,0,20,25,image);
checkBound(-2,-3,22,26,0,0,20,25,image);
}
private void checkBound( int x0, int y0, int x1 , int y1,
int ex0, int ey0, int ex1, int ey1 ,
ImageGray image )
{
ImageRectangle a = new ImageRectangle(x0,y0,x1,y1);
BoofMiscOps.boundRectangleInside(image,a);
assertEquals(ex0,a.x0);
assertEquals(ey0,a.y0);
assertEquals(ex1,a.x1);
assertEquals(ey1,a.y1);
}
@Test
public void checkInside_img_float() {
GrayU8 image = new GrayU8(20,25);
assertTrue(BoofMiscOps.checkInside(image,0f,0f));
assertTrue(BoofMiscOps.checkInside(image,19f,24f));
assertTrue(BoofMiscOps.checkInside(image,5f,10f));
assertFalse(BoofMiscOps.checkInside(image,-0.01f,0));
assertFalse(BoofMiscOps.checkInside(image,0,-0.01f));
assertFalse(BoofMiscOps.checkInside(image,0,24.01f));
assertFalse(BoofMiscOps.checkInside(image,19.01f,0));
}
@Test
public void checkInside_wh_float() {
assertTrue(BoofMiscOps.checkInside(20,25,0f,0f));
assertTrue(BoofMiscOps.checkInside(20,25,19f,24f));
assertTrue(BoofMiscOps.checkInside(20,25,5f,10f));
assertFalse(BoofMiscOps.checkInside(20,25,-0.01f,0));
assertFalse(BoofMiscOps.checkInside(20,25,0,-0.01f));
assertFalse(BoofMiscOps.checkInside(20,25,0,24.01f));
assertFalse(BoofMiscOps.checkInside(20,25,19.01f,0));
}
@Test
public void checkInside_img_double() {
GrayU8 image = new GrayU8(20,25);
assertTrue(BoofMiscOps.checkInside(image,0d,0d));
assertTrue(BoofMiscOps.checkInside(image,19d,24d));
assertTrue(BoofMiscOps.checkInside(image,5d,10d));
assertFalse(BoofMiscOps.checkInside(image,-0.01d,0));
assertFalse(BoofMiscOps.checkInside(image,0,-0.01d));
assertFalse(BoofMiscOps.checkInside(image,0,24.01d));
assertFalse(BoofMiscOps.checkInside(image,19.01d,0));
}
@Test
public void checkInside_wh_double() {
assertTrue(BoofMiscOps.checkInside(20,25,0d,0d));
assertTrue(BoofMiscOps.checkInside(20,25,19d,24d));
assertTrue(BoofMiscOps.checkInside(20,25,5d,10d));
assertFalse(BoofMiscOps.checkInside(20,25,-0.01d,0));
assertFalse(BoofMiscOps.checkInside(20,25,0,-0.01d));
assertFalse(BoofMiscOps.checkInside(20,25,0,24.01d));
assertFalse(BoofMiscOps.checkInside(20,25,19.01d,0));
}
@Test
public void checkInside_w_h() {
GrayU8 image = new GrayU8(20,25);
assertTrue(BoofMiscOps.checkInside(image,2,3,2,3));
assertTrue(BoofMiscOps.checkInside(image,17,21,2,3));
assertTrue(BoofMiscOps.checkInside(image,6,7,2,3));
assertFalse(BoofMiscOps.checkInside(image,1,3,2,3));
assertFalse(BoofMiscOps.checkInside(image,2,2,2,3));
assertFalse(BoofMiscOps.checkInside(image,18,21,2,3));
assertFalse(BoofMiscOps.checkInside(image,17,22,2,3));
}
@Test
public void checkInside_radius_int() {
GrayU8 image = new GrayU8(20,25);
assertTrue(BoofMiscOps.checkInside(image,2,2,2));
assertTrue(BoofMiscOps.checkInside(image,17,22,2));
assertTrue(BoofMiscOps.checkInside(image,15,20,4));
assertTrue(BoofMiscOps.checkInside(image,4,4,4));
assertTrue(BoofMiscOps.checkInside(image,0,0,0));
assertTrue(BoofMiscOps.checkInside(image,19,24,0));
assertFalse(BoofMiscOps.checkInside(image,1,2,2));
assertFalse(BoofMiscOps.checkInside(image,2,1,2));
assertFalse(BoofMiscOps.checkInside(image,18,22,2));
assertFalse(BoofMiscOps.checkInside(image,17,23,2));
assertFalse(BoofMiscOps.checkInside(image,-1,0,0));
assertFalse(BoofMiscOps.checkInside(image,0,-1,0));
}
@Test
public void checkInside_radius_F32() {
GrayU8 image = new GrayU8(20,25);
assertTrue(BoofMiscOps.checkInside(image,2f,2f,2f));
assertTrue(BoofMiscOps.checkInside(image,17f,22f,2f));
assertTrue(BoofMiscOps.checkInside(image,15f,20f,4f));
assertTrue(BoofMiscOps.checkInside(image,4f,4f,4f));
assertTrue(BoofMiscOps.checkInside(image,0f,0f,0f));
assertTrue(BoofMiscOps.checkInside(image,19f,24f,0f));
assertFalse(BoofMiscOps.checkInside(image,1f,2f,2f));
assertFalse(BoofMiscOps.checkInside(image,2f,1f,2f));
assertFalse(BoofMiscOps.checkInside(image,18f,22f,2f));
assertFalse(BoofMiscOps.checkInside(image,17f,23f,2f));
assertFalse(BoofMiscOps.checkInside(image,-1f,0f,0f));
assertFalse(BoofMiscOps.checkInside(image,0f,-1f,0f));
assertFalse(BoofMiscOps.checkInside(image,0f,-0.4f,0f));
assertFalse(BoofMiscOps.checkInside(image,-0.4f,0f,0f));
assertFalse(BoofMiscOps.checkInside(image,19.1f,24f,0f));
assertFalse(BoofMiscOps.checkInside(image,19.1f,24.1f,0f));
assertTrue(BoofMiscOps.checkInside(image,0.1f,0.1f,0f));
assertTrue(BoofMiscOps.checkInside(image,18.9f,23.9f,0f));
}
@Test
public void checkInside_radius_F64() {
GrayU8 image = new GrayU8(20,25);
assertTrue(BoofMiscOps.checkInside(image,2d,2d,2d));
assertTrue(BoofMiscOps.checkInside(image,17d,22d,2d));
assertTrue(BoofMiscOps.checkInside(image,15d,20d,4d));
assertTrue(BoofMiscOps.checkInside(image,4d,4d,4d));
assertTrue(BoofMiscOps.checkInside(image,0d,0d,0d));
assertTrue(BoofMiscOps.checkInside(image,19d,24d,0d));
assertFalse(BoofMiscOps.checkInside(image,1d,2d,2d));
assertFalse(BoofMiscOps.checkInside(image,2d,1d,2d));
assertFalse(BoofMiscOps.checkInside(image,18d,22d,2d));
assertFalse(BoofMiscOps.checkInside(image,17d,23d,2d));
assertFalse(BoofMiscOps.checkInside(image,-1d,0d,0d));
assertFalse(BoofMiscOps.checkInside(image,0d,-1d,0d));
assertFalse(BoofMiscOps.checkInside(image,0d,-0.4d,0d));
assertFalse(BoofMiscOps.checkInside(image,-0.4d,0d,0d));
assertFalse(BoofMiscOps.checkInside(image,19.1d,24d,0d));
assertFalse(BoofMiscOps.checkInside(image,19.1d,24.1d,0d));
assertTrue(BoofMiscOps.checkInside(image,0.1d,0.1d,0d));
assertTrue(BoofMiscOps.checkInside(image,18.9d,23.9d,0d));
}
@Test
public void checkInside_ImageRectangle() {
GrayU8 image = new GrayU8(20,25);
assertTrue(BoofMiscOps.checkInside(image,new ImageRectangle(0,0,20,25)));
assertTrue(BoofMiscOps.checkInside(image,new ImageRectangle(2,4,15,23)));
assertFalse(BoofMiscOps.checkInside(image,new ImageRectangle(-1,0,20,25)));
assertFalse(BoofMiscOps.checkInside(image,new ImageRectangle(0,-1,20,25)));
assertFalse(BoofMiscOps.checkInside(image,new ImageRectangle(0,0,21,25)));
assertFalse(BoofMiscOps.checkInside(image,new ImageRectangle(0,0,20,26)));
}
}