List of usage examples for org.opencv.utils Converters vector_int_to_Mat
public static Mat vector_int_to_Mat(List<Integer> is)
From source file:karthik.Barcode.MatrixBarcode.java
License:Open Source License
private Mat calcProbabilityTilings(int tileSize) { // calculates probability of each tile being in a 2D barcode region // tiles must be square assert (searchParams.RECT_HEIGHT == searchParams.RECT_WIDTH) : "RECT_HEIGHT and RECT_WIDTH must be equal in searchParams imageSpecificParams"; int probMatTileSize = (int) (tileSize * (searchParams.PROB_MAT_TILE_SIZE / (1.0 * searchParams.tileSize))); int threshold_min_gradient_edges = (int) (tileSize * tileSize * searchParams.THRESHOLD_MIN_GRADIENT_EDGES_MULTIPLIER); int right_col, bottom_row; int prob_mat_right_col, prob_mat_bottom_row; Mat imgWindow; // used to hold sub-matrices from the image that represent the window around the current point Mat prob_window; // used to hold sub-matrices into probability matrix that represent window around current point int num_edges; double prob;/*from w w w . j a v a 2s . com*/ int max_angle_idx, second_highest_angle_index, max_angle_count, second_highest_angle_count, angle_diff; img_details.probabilities.setTo(ZERO_SCALAR); for (int i = 0, row_offset = 0; i < rows; i += tileSize, row_offset += probMatTileSize) { // first do bounds checking for bottom right of tiles bottom_row = java.lang.Math.min((i + tileSize), rows); prob_mat_bottom_row = java.lang.Math.min((row_offset + probMatTileSize), img_details.probMatRows); for (int j = 0, col_offset = 0; j < cols; j += tileSize, col_offset += probMatTileSize) { // then calculate the column locations of the rectangle and set them to -1 // if they are outside the matrix bounds right_col = java.lang.Math.min((j + tileSize), cols); prob_mat_right_col = java.lang.Math.min((col_offset + probMatTileSize), img_details.probMatCols); // calculate number of edges in the tile using the already calculated integral image num_edges = (int) calc_rect_sum(img_details.edgeDensity, img_details.histNumRows, img_details.histNumCols, i, bottom_row, j, right_col); if (num_edges < threshold_min_gradient_edges) // if gradient density is below the threshold level, prob of matrix code in this tile is 0 continue; for (int r = 0; r < img_details.bins; r++) { img_details.histArray[r] = (int) calc_rect_sum(img_details.histIntegralArrays[r], img_details.histNumRows, img_details.histNumCols, i, bottom_row, j, right_col); } hist = Converters.vector_int_to_Mat(Arrays.asList(img_details.histArray)); Core.sortIdx(hist, histIdx, Core.SORT_EVERY_COLUMN + Core.SORT_DESCENDING); max_angle_idx = (int) histIdx.get(0, 0)[0]; max_angle_count = (int) hist.get(max_angle_idx, 0)[0]; second_highest_angle_index = (int) histIdx.get(1, 0)[0]; second_highest_angle_count = (int) hist.get(second_highest_angle_index, 0)[0]; angle_diff = Math.abs(max_angle_idx - second_highest_angle_index); // formula below is modified from Szentandrasi, Herout, Dubska paper pp. 4 prob = 0; if (angle_diff != 1) // ignores tiles where there is just noise between adjacent bins in the histogram prob = 2.0 * Math.min(max_angle_count, second_highest_angle_count) / (max_angle_count + second_highest_angle_count); prob_window = img_details.probabilities.submat(row_offset, prob_mat_bottom_row, col_offset, prob_mat_right_col); prob_window.setTo(new Scalar((int) (prob * 255))); } // for j } // for i return img_details.probabilities; }