Skip to content
Snippets Groups Projects
Commit 57d8e2b9 authored by Schrödter, Tobias's avatar Schrödter, Tobias
Browse files

Fixing the occurring infinite loop, by using `cv::transform` instead of...

Fixing the occurring infinite loop, by using `cv::transform` instead of pointer arithmetic when using the blackdot marker.

Signed-off-by: default avatarschroedtert <t.schroedter@fz-juelich.de>
parent a35f779f
No related branches found
No related tags found
1 merge request!100Resolve blackdot marker endless loop
......@@ -324,12 +324,6 @@ void findMultiColorMarker(Mat &img, QList<TrackPoint> *crossList, Control *contr
// IplImage *subImg;
// IplImage *subGray;
// IplImage *subBW;
unsigned char* dataImg;
unsigned char* yDataImg;
unsigned char* data;
unsigned char* yData;
int dd;
float scaleR, scaleG, scaleB, scaleSum;
int minGrey; // minimaler Grauwert
Vec2F subCenter;
......@@ -569,32 +563,20 @@ void findMultiColorMarker(Mat &img, QList<TrackPoint> *crossList, Control *contr
// subImg = img.clone();
subImg = img(cropRect);
// subGray = cvCreateImage(cvGetSize(subImg), IPL_DEPTH_8U, 1);
subGray.create(Size(subImg.rows,subImg.cols),CV_8UC1);
// liefert sehr dunkle bilder insbesondere bei rottoenen
//cvCvtColor(subImg, subGray, CV_BGR2GRAY);
// gewichtete umwandlung RGB nach Grey
dataImg = ((unsigned char*) subImg.data);
yDataImg = dataImg;
data = ((unsigned char*) subGray.data);
yData = data;
scaleR = midHue.redF(); scaleG = midHue.greenF(); scaleB = midHue.blueF();
scaleSum = scaleR+scaleG+scaleB;
scaleR/=scaleSum; scaleG/=scaleSum; scaleB/=scaleSum;
for (int y = 0; y < subGray.rows; ++y)
{
for (int x = 0; x < subGray.cols; ++x)
{
dd = scaleB*dataImg[0]+scaleG*dataImg[1]+scaleR*dataImg[2];
*data = dd<256?dd:255;
// Compute weighted conversion from RGB to gray, as CV_BGR2GRAY results in very dark images
// especially for red shades
float scaleR = midHue.redF();
float scaleG = midHue.greenF();
float scaleB = midHue.blueF();
float scaleSum = scaleR+scaleG+scaleB;
scaleR/=scaleSum;
scaleG/=scaleSum;
scaleB/=scaleSum;
cv::Mat bgrToGray = (Mat_<double>(1,3) << scaleB, scaleG, scaleR);
++data;
dataImg+=3;
}
data = (yData += subGray.cols/sizeof(char)); //width);
dataImg = (yDataImg += subImg.cols/sizeof(char)); //width);
}
// Performs the matrix-vector multiplication MxN for each pixel of subImg, where M is bgrToGray
// and N is a vector of all channels of a pixel, the result will be saved in subGray.
cv::transform(subImg, subGray, bgrToGray);
//IplImage *tmpAusgabe = cvCloneImage(subImg);//subImg subGray
......@@ -635,7 +617,7 @@ void findMultiColorMarker(Mat &img, QList<TrackPoint> *crossList, Control *contr
maxThreshold = max(max(getValue(subGray, subGray.cols/2, subGray.rows/2).value(),
getValue(subGray, subGray.cols/4, subGray.rows/2).value()),
getValue(subGray, 3*subGray.cols/4, subGray.rows/2).value());
step = (maxThreshold-5)/5;
step = std::max((maxThreshold-5)/5, 1);
minGrey = 300;
//for (threshold = 40; threshold < 251 ; threshold += 30) // 40, 70, 100, 130, 160, 190, 220, 250
for (threshold = 5; threshold < maxThreshold; threshold += step) // col.value()
......
File added
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE PETRACK>
<PETRACK VERSION="0.8.15">
<MAIN SRC="blackdotMarker.mp4" STATUS_HEIGHT="0"/>
<CONTROL TAB="2">
<CALIBRATION>
<BRIGHTNESS ENABLED="0" VALUE="-20"/>
<CONTRAST ENABLED="0" VALUE="0"/>
<BORDER COLOR="#000000" ENABLED="1" VALUE="64"/>
<SWAP ENABLED="0" HORIZONTALLY="0" VERTICALLY="0"/>
<BG_SUB DELETE="1" DELETE_NUMBER="3" ENABLED="0" FILE="" SHOW="0" UPDATE="0"/>
<PATTERN BOARD_SIZE_X="6" BOARD_SIZE_Y="9" SQUARE_SIZE="3"/>
<INTRINSIC_PARAMETERS CALIB_FILES="" CX="1038" CY="798" ENABLED="1" FIX_CENTER="0" FX="835.65999999999997" FY="835.75999999999999" K4="0" K5="0" K6="0" QUAD_ASPECT_RATIO="0" R2="-0.246701" R4="0.072692000000000007" R6="-0.010224" TANG_DIST="1" TX="0.00033700000000000001" TY="6.9999999999999999e-06"/>
<EXTRINSIC_PARAMETERS ALTITUDE="535" COORD3D_AXIS_LEN="200" COORD3D_SWAP_X="0" COORD3D_SWAP_Y="0" COORD3D_SWAP_Z="0" COORD3D_TRANS_X="225" COORD3D_TRANS_Y="350" COORD3D_TRANS_Z="0" COORD_DIMENSION="0" EXTERNAL_CALIB_FILE="" EXTR_ROT_1="-2.2050000000000001" EXTR_ROT_2="-2.177" EXTR_ROT_3="0.104" EXTR_TRANS_1="-224.46700000000001" EXTR_TRANS_2="-629.58500000000004" EXTR_TRANS_3="-408.82499999999999" FIX="1" ROTATE="0" SCALE="1" SHOW="0" SHOW_CALIB_POINTS="0" TRANS_X="0" TRANS_Y="0" UNIT="100" USE_INTRINSIC_CENTER="0"/>
<ALIGNMENT_GRID FIX="1" GRID3D_RESOLUTION="100" GRID3D_TRANS_X="75" GRID3D_TRANS_Y="-18" GRID3D_TRANS_Z="0" GRID_DIMENSION="0" ROTATE="0" SCALE="1" SHOW="0" TRANS_X="0" TRANS_Y="0"/>
</CALIBRATION>
<RECOGNITION>
<PERFORM ENABLED="1" METHOD="5" STEP="1"/>
<REGION_OF_INTEREST FIX="1" HEIGHT="1440" SHOW="0" WIDTH="1753" X="-76" Y="0"/>
<MARKER BRIGHTNESS="64" IGNORE_WITHOUT="1"/>
<SIZE_COLOR AUTO_WB="0" DEFAULT_HEIGHT="166.40000000000001" GREY_LEVEL="50" MAP_NUMBER="4" MODEL="0" SHOW="1" SYMBOL_SIZE="10" X="0" Y="1" Z="255">
<MAP COLORED="1" FROM_HUE="306" FROM_SAT="69" FROM_VAL="122" HEIGHT="186" INV_HUE="0" MAP_HEIGHT="145.09999999999999" TO_HUE="332" TO_SAT="255" TO_VAL="255" WIDTH="26" X="306" Y="69"/>
<MAP COLORED="1" FROM_HUE="351" FROM_SAT="173" FROM_VAL="167" HEIGHT="82" INV_HUE="1" MAP_HEIGHT="156.59999999999999" TO_HUE="11" TO_SAT="255" TO_VAL="255" WIDTH="340" X="11" Y="173"/>
<MAP COLORED="1" FROM_HUE="60" FROM_SAT="47" FROM_VAL="129" HEIGHT="208" INV_HUE="0" MAP_HEIGHT="166.40000000000001" TO_HUE="82" TO_SAT="255" TO_VAL="255" WIDTH="22" X="60" Y="47"/>
<MAP COLORED="1" FROM_HUE="122" FROM_SAT="57" FROM_VAL="124" HEIGHT="198" INV_HUE="0" MAP_HEIGHT="179.30000000000001" TO_HUE="161" TO_SAT="255" TO_VAL="255" WIDTH="39" X="122" Y="57"/>
<MAP COLORED="1" FROM_HUE="194" FROM_SAT="112" FROM_VAL="64" HEIGHT="143" INV_HUE="0" MAP_HEIGHT="191.69999999999999" TO_HUE="218" TO_SAT="255" TO_VAL="255" WIDTH="24" X="194" Y="112"/>
</SIZE_COLOR>
<READ_HEIGHTS HEIGHT_FILE=""/>
<READ_MARKER_IDS MARKER_FILE=""/>
</RECOGNITION>
<TRACKING>
<ONLINE_CALCULATION ENABLED="0"/>
<REPEAT_BELOW ENABLED="1" QUALITY="50"/>
<EXTRAPOLATION ENABLED="1"/>
<MERGE ENABLED="0"/>
<ONLY_VISIBLE ENABLED="1"/>
<REGION_OF_INTEREST FIX="0" HEIGHT="1696" SHOW="0" WIDTH="2176" X="-128" Y="-128"/>
<SEARCH_MISSING_FRAMES ENABLED="0"/>
<RECALCULATE_MEDIAN_HEIGHT ENABLED="0"/>
<ALLOW_ALTERNATE_HEIGHT ENABLED="0"/>
<EXPORT_ELIMINATE_TRACKPOINT_WITHOUT_HEIGHT ENABLED="0"/>
<EXPORT_ELIMINATE_TRAJECTORY_WITHOUT_HEIGHT ENABLED="0"/>
<EXPORT_SMOOTH ENABLED="0"/>
<EXPORT_VIEWING_DIRECTION ENABLED="0"/>
<EXPORT_ANGLE_OF_VIEW ENABLED="0"/>
<EXPORT_USE_METER ENABLED="0"/>
<EXPORT_COMMENT ENABLED="0"/>
<EXPORT_MARKERID ENABLED="0"/>
<TEST_EQUAL ENABLED="0"/>
<TEST_VELOCITY ENABLED="0"/>
<TEST_INSIDE ENABLED="0"/>
<TEST_LENGTH ENABLED="0"/>
<TRACK_FILE FILENAME=""/>
<SEARCH_REGION ADAPTIVE="0" LEVELS="2" MAX_ERROR="0" SCALE="12" SHOW="1"/>
<PATH AFTER="15" BEFORE="15" COLLECTIVE_COLOR_SIZE="11" COLOR_MARKER_SIZE="14" CURRENT_POINT_SIZE="15" FIX="0" GROUND_PATH_SIZE="1" GROUND_POSITION_SIZE="1" HEAD_SIZE="0" NUMBER_BOLD="1" NUMBER_SIZE="25" ONLY_PEOPLE="0" ONLY_PEOPLE_LIST="0" ONLY_PEOPLE_NR="1" ONLY_PEOPLE_NR_LIST="1" ONLY_VISIBLE="0" PATH_SIZE="2" POINTS_COLORED="1" POINTS_SIZE="7" SHOW="1" SHOW_COLLECTIVE_COLOR="0" SHOW_COLOR_MARKER="0" SHOW_CURRENT_POINT="1" SHOW_GROUND_PATH="0" SHOW_GROUND_POSITION="0" SHOW_NUMBER="1" SHOW_PATH="1" SHOW_POINTS="0" TRACK_GROUND_PATH_COLOR="#00ff00" TRACK_PATH_COLOR="#0000ff"/>
</TRACKING>
<ANALYSIS>
<SEARCH_MISSING_FRAMES ENABLED="1"/>
<MARK_ACTUAL ENABLED="0"/>
<CALCULATION ABSOLUTE="0" CONSIDER_X="0" CONSIDER_Y="1" REVERSE="0" SHOW_VORONOI="0" STEP_SIZE="25"/>
</ANALYSIS>
</CONTROL>
<EXTR_CALIBRATION>
<REPROJECTION_ERROR AVG_DH="6.9346406888165977e-310" AVG_PH="4.0473857707314917e-319" AVG_PX="6.9346406888165977e-310" MAX_DH="4.646775768903306e-310" MAX_PH="4.6467757711238346e-310" MAX_PX="6.9346406892679761e-310" SD_DH="4.6467747728396915e-310" SD_PH="6.9346406888723283e-310" SD_PX="4.6467757687831492e-310" USED_HEIGHT="6.9346406107594628e-310"/>
</EXTR_CALIBRATION>
<STEREO>
<DISPARITY ALGO="0" COLOR="0" HIDE_INVALID="1" OPACITY="100" SHOW="0">
<VALUES MAX="100" MIN="0"/>
<MASK EDGE_SIZE="5" SIZE="7" USE_EDGE="0"/>
<USE CALIB_CENTER="1" EXPORT="0" HEIGHT="0" HEIGHT_EVER="1" RECO="0"/>
</DISPARITY>
</STEREO>
<COLOR_MARKER>
<MASK MASK="1" OPACITY="100" SHOW="0"/>
<FROM_COLOR HUE="0" SATURATION="0" VALUE="0"/>
<TO_COLOR HUE="359" SATURATION="255" VALUE="255"/>
<PARAM CLOSE_RADIUS="2" CLOSE_USED="1" INVERS_HUE="0" MAX_AREA="5000" MAX_RATIO="2" MIN_AREA="1000" OPEN_RADIUS="5" OPEN_USED="1"/>
</COLOR_MARKER>
<CODE_MARKER>
<DICTIONARY ID="16"/>
<PARAM ADAPTIVE_THRESH_CONSTANT="7" ADAPTIVE_THRESH_WIN_SIZE_MAX="23" ADAPTIVE_THRESH_WIN_SIZE_MIN="3" ADAPTIVE_THRESH_WIN_SIZE_STEP="10" CORNER_REFINEMENT="0" CORNER_REFINEMENT_MAX_ITERATIONS="30" CORNER_REFINEMENT_MIN_ACCURACY="0.10000000000000001" CORNER_REFINEMENT_WIN_SIZE="5" ERROR_CORRECTION_RATE="0.59999999999999998" MARKER_BORDER_BITS="1" MAX_ERRONEOUS_BITS_IN_BORDER_RATE="0.34999999999999998" MAX_MARKER_PERIMETER="15" MAX_RATIO_ERROR="0.029999999999999999" MIN_CORNER_DISTANCE="0.050000000000000003" MIN_DISTANCE_TO_BORDER="3" MIN_MARKER_DISTANCE="0.050000000000000003" MIN_MARKER_PERIMETER="5" MIN_OTSU_STD_DEV="5" PERSPECTIVE_REMOVE_IGNORED_MARGIN_PER_CELL="0.13" PERSPECTIVE_REMOVE_PIXEL_PER_CELL="4" SHOW_DETECTED_CANDIDATES="0"/>
</CODE_MARKER>
<MULTI_COLOR_MARKER>
<BLACK_DOT IGNORE_WITHOUT="0" RESTRICT_POSITION="1" SIZE="5" USE="1" USE_COLOR="1"/>
<CODE_MARKER USE="0"/>
<AUTO_CORRECT ONLY_EXPORT="0" USE="1"/>
<MASK MASK="1" OPACITY="60" SHOW="1"/>
<PARAM CLOSE_RADIUS="10" CLOSE_USED="1" MAX_AREA="6518" MAX_RATIO="1.8" MIN_AREA="1955" OPEN_RADIUS="10" OPEN_USED="1" USE_HEAD_SIZE="1"/>
</MULTI_COLOR_MARKER>
<PLAYER FPS="25" FRAME="0" PLAYER_SPEED_FIXED="0" SOURCE_FRAME_IN="0" SOURCE_FRAME_OUT="543"/>
<VIEW ANTIALIAS="0" CAMERA="2" HIDE_CONTROLS="0" OPENGL="0" SAVE_TRANSFORMED="0" TRANSFORMATION="215 0 0 0"/>
<AUTO_TRACK BACK_TRACK="1" OPTIMZE_COLOR="0"/>
</PETRACK>
This diff is collapsed.
This diff is collapsed.
......@@ -28,7 +28,7 @@ def pytest_addoption(parser):
# "codeMarker"
@pytest.fixture(params=["markerCasern", "multicolor", "markerJapan", "multiColorMarkerWithAruco", "multiColorMarkerWithAruco_dictMip36h12"], scope='session')
@pytest.fixture(params=["markerCasern", "multicolor", "markerJapan", "multiColorMarkerWithAruco", "multiColorMarkerWithAruco_dictMip36h12", "blackdotMarker"], scope='session')
def petrack_on_testdata(request, pytestconfig):
petrack_path = pytestconfig.getoption("path")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment