public ThreadRegionProcessingState( int processing_type, byte[] bmp, int image_width, int image_height, region image_region) { active = true; this.processing_type = processing_type; this.bmp = bmp; this.image_width = image_width; this.image_height = image_height; this.image_region = image_region; }
public static region upsample(region original, float scale, byte[] bmp, int bmp_width, int bmp_height, bool propertiesOnly) { region upsampled = new region(); upsampled.classification = original.classification; upsampled.geometry_type = original.geometry_type; upsampled.description = original.description; upsampled.tx = (int)(original.tx * scale); upsampled.ty = (int)(original.ty * scale); upsampled.width = (int)(original.width * scale); upsampled.height = (int)(original.height * scale); upsampled.orientation = original.orientation; upsampled.centre_x = (int)(original.centre_x * scale); upsampled.centre_y = (int)(original.centre_y * scale); upsampled.aspect_ratio = original.aspect_ratio; upsampled.corners = new ArrayList(); for (int i = 0; i < original.corners.Count; i += 2) { float x = (float)original.corners[i] * scale; float y = (float)original.corners[i + 1] * scale; upsampled.corners.Add(x); upsampled.corners.Add(y); } upsampled.polygon = new polygon2D(); for (int i = 0; i < original.polygon.x_points.Count; i++) { float x = (float)original.polygon.x_points[i] * scale; float y = (float)original.polygon.y_points[i] * scale; upsampled.polygon.Add(x, y); } if (!propertiesOnly) { upsampled.shape = new bool[upsampled.width, upsampled.height]; upsampled.segmented = new byte[upsampled.width, upsampled.height]; upsampled.mono_image = new byte[upsampled.width * upsampled.height]; for (int y = 0; y < upsampled.height; y++) { int y_original = (int)(y / scale); for (int x = 0; x < upsampled.width; x++) { int x_original = (int)(x / scale); upsampled.shape[x, y] = original.shape[x_original, y_original]; upsampled.segmented[x, y] = original.segmented[x_original, y_original]; int n1 = (y * upsampled.width) + x; int n2 = (((upsampled.ty + y) * bmp_width) + (upsampled.tx + x)) * 3; upsampled.mono_image[n1] = (byte)((bmp[n2] + bmp[n2 + 1] + bmp[n2 + 2]) / 3); } } upsampled.corner_features = new ArrayList(); for (int i = 0; i < original.corner_features.Count; i += 2) { int x = (int)((int)original.corner_features[i] * scale); int y = (int)((int)original.corner_features[i + 1] * scale); upsampled.corner_features.Add(x); upsampled.corner_features.Add(y); } upsampled.outline = new ArrayList(); for (int i = 0; i < original.outline.Count; i += 2) { int x = (int)((int)original.outline[i] * scale); int y = (int)((int)original.outline[i + 1] * scale); upsampled.outline.Add(x); upsampled.outline.Add(y); } } return (upsampled); }