update 优化支架搜边

dev_lsy
liusiyang 2 weeks ago
parent 2d1ce72a6f
commit c109f19f4f

@ -64,6 +64,8 @@ public:
cv::Mat detImg; cv::Mat detImg;
// 裁剪后的彩色检测图(保留原图通道,供裁剪图 _RE_CutImg 输出;灰度源图时为空) // 裁剪后的彩色检测图(保留原图通道,供裁剪图 _RE_CutImg 输出;灰度源图时为空)
cv::Mat detColorImg; cv::Mat detColorImg;
// 只做"裁剪"、不叠加任何 mask 的检测图(同 detImg 尺寸/坐标系)
cv::Mat detImgNoMask;
// AI 推理的mask图片 // AI 推理的mask图片
cv::Mat AIMaskImg; cv::Mat AIMaskImg;
// 结果图片 // 结果图片

File diff suppressed because it is too large Load Diff

@ -934,9 +934,10 @@ struct Function_Support_Det
float r_offset; // 支架旋转偏移阈值(度):支架旋转矩形长轴(对应左/右边缘)与产品左/右边缘夹角超过该值判偏移;<=0 不判定 float r_offset; // 支架旋转偏移阈值(度):支架旋转矩形长轴(对应左/右边缘)与产品左/右边缘夹角超过该值判偏移;<=0 不判定
float support_min_area; // 支架缺失判定:支架面积阈值(单位 mm²)。支架由 Align_Inner 模型(smallmask)检出,支架面积 < 该值判缺失;<=0 不判定 float support_min_area; // 支架缺失判定:支架面积阈值(单位 mm²)。支架由 Align_Inner 模型(smallmask)检出,支架面积 < 该值判缺失;<=0 不判定
// 支架边缘原图精细化(Support_Detect.form.support_param,均可选;仅对 edge_select 选中的边缘生效): // 支架边缘原图精细化(Support_Detect.form.support_param,均可选;仅对 edge_select 选中的边缘生效):
// 沿边缘按步长采样,从边缘向产品内侧逐像素找第一个 255 像素作为新边缘点,再重新拟合边缘线 // 沿边缘按步长采样,从边缘向产品内侧逐像素找第一个灰度 >= 阈值的像素作为新边缘点,再重新拟合边缘线
float edge_refine_search; // edge_refine_search:最多向内搜索的像素数;<=0=未配置(默认 80) float edge_refine_search; // edge_refine_search:最多向内搜索的像素数;<=0=未配置(默认 80)
float edge_refine_step; // edge_refine_step:沿边采样步长(像素,不需要每个点都找);<=0=未配置(默认 40) float edge_refine_step; // edge_refine_step:沿边采样步长(像素,不需要每个点都找);<=0=未配置(默认 40)
float edge_refine_gray; // edge_refine_gray:边缘点灰度阈值(0~255,灰度 >= 该值视为产品边缘);<=0=未配置(默认 240)
// 支架方向精细化(Support_Detect.form.support_param,均可选):模型 smallmask 精度低 // 支架方向精细化(Support_Detect.form.support_param,均可选):模型 smallmask 精度低
// (1696×800 上采样回原图),minAreaRect 求支架方向角误差大;改为在原图(detImg)上拟合支架长边求方向角 // (1696×800 上采样回原图),minAreaRect 求支架方向角误差大;改为在原图(detImg)上拟合支架长边求方向角
float support_refine_search; // support_refine_search:取模型支架外接矩形最外侧多少列作为边缘搜索带;<=0=未配置(默认 30) float support_refine_search; // support_refine_search:取模型支架外接矩形最外侧多少列作为边缘搜索带;<=0=未配置(默认 30)
@ -982,6 +983,7 @@ struct Function_Support_Det
support_min_area = 0; support_min_area = 0;
edge_refine_search = 0; edge_refine_search = 0;
edge_refine_step = 0; edge_refine_step = 0;
edge_refine_gray = 0;
support_refine_search = 0; support_refine_search = 0;
support_refine_step = 0; support_refine_step = 0;
support_refine_segments = 0; support_refine_segments = 0;
@ -1016,6 +1018,7 @@ struct Function_Support_Det
this->support_min_area = tem.support_min_area; this->support_min_area = tem.support_min_area;
this->edge_refine_search = tem.edge_refine_search; this->edge_refine_search = tem.edge_refine_search;
this->edge_refine_step = tem.edge_refine_step; this->edge_refine_step = tem.edge_refine_step;
this->edge_refine_gray = tem.edge_refine_gray;
this->support_refine_search = tem.support_refine_search; this->support_refine_search = tem.support_refine_search;
this->support_refine_step = tem.support_refine_step; this->support_refine_step = tem.support_refine_step;
this->support_refine_segments = tem.support_refine_segments; this->support_refine_segments = tem.support_refine_segments;
@ -1037,16 +1040,16 @@ struct Function_Support_Det
} }
void print(std::string str) void print(std::string str)
{ {
printf("%s>>bDetSupport %d bDrawSupport %d bUseTraditionEdge %d bDetHandle %d bDetTag %d x_standard %f y_standard %f x_offset %f y_offset %f r_offset %f support_min_area %f edgeRefine[search %.0f step %.0f] supportRefine[search %.0f step %.0f seg %.0f] edge num %ld handleRegion num %ld handle_diff %f handleRange[size %.2f~%.2f search %.1f depth %.1f area %.1f margin %.1f(0=自动,<0=默认)] BQ[area %f energy %f len %f hj %f]\n", printf("%s>>bDetSupport %d bDrawSupport %d bUseTraditionEdge %d bDetHandle %d bDetTag %d x_standard %f y_standard %f x_offset %f y_offset %f r_offset %f support_min_area %f edgeRefine[search %.0f step %.0f gray %.0f] supportRefine[search %.0f step %.0f seg %.0f] edge num %ld handleRegion num %ld handle_diff %f handleRange[size %.2f~%.2f search %.1f depth %.1f area %.1f margin %.1f(0=自动,<0=默认)] BQ[area %f energy %f len %f hj %f]\n",
str.c_str(), bDetSupport, bDrawSupport, bUseTraditionEdge, bDetHandle, bDetTag, x_standard, y_standard, x_offset, y_offset, r_offset, support_min_area, edge_refine_search, edge_refine_step, support_refine_search, support_refine_step, support_refine_segments, edge_select.size(), handleRegions.size(), handle_diff, str.c_str(), bDetSupport, bDrawSupport, bUseTraditionEdge, bDetHandle, bDetTag, x_standard, y_standard, x_offset, y_offset, r_offset, support_min_area, edge_refine_search, edge_refine_step, edge_refine_gray, support_refine_search, support_refine_step, support_refine_segments, edge_select.size(), handleRegions.size(), handle_diff,
handle_size_min_ratio, handle_size_max_ratio, handle_search_ratio, handle_min_depth_coef, handle_min_area_coef, handle_edge_margin_coef, handle_size_min_ratio, handle_size_max_ratio, handle_search_ratio, handle_min_depth_coef, handle_min_area_coef, handle_edge_margin_coef,
BQ_area, BQ_energy, BQ_len, BQ_hj); BQ_area, BQ_energy, BQ_len, BQ_hj);
} }
std::string GetInfo(std::string str) std::string GetInfo(std::string str)
{ {
char buffer[1024]; char buffer[1024];
sprintf(buffer, "%s>>bDetSupport %d bDrawSupport %d bUseTraditionEdge %d bDetHandle %d bDetTag %d x_standard %f y_standard %f x_offset %f y_offset %f r_offset %f support_min_area %f edgeRefine[search %.0f step %.0f] supportRefine[search %.0f step %.0f seg %.0f] edge num %ld handleRegion num %ld handle_diff %f handleRange[size %.2f~%.2f search %.1f depth %.1f area %.1f margin %.1f(0=自动,<0=默认)] BQ[area %f energy %f len %f hj %f]\n", sprintf(buffer, "%s>>bDetSupport %d bDrawSupport %d bUseTraditionEdge %d bDetHandle %d bDetTag %d x_standard %f y_standard %f x_offset %f y_offset %f r_offset %f support_min_area %f edgeRefine[search %.0f step %.0f gray %.0f] supportRefine[search %.0f step %.0f seg %.0f] edge num %ld handleRegion num %ld handle_diff %f handleRange[size %.2f~%.2f search %.1f depth %.1f area %.1f margin %.1f(0=自动,<0=默认)] BQ[area %f energy %f len %f hj %f]\n",
str.c_str(), bDetSupport, bDrawSupport, bUseTraditionEdge, bDetHandle, bDetTag, x_standard, y_standard, x_offset, y_offset, r_offset, support_min_area, edge_refine_search, edge_refine_step, support_refine_search, support_refine_step, support_refine_segments, edge_select.size(), handleRegions.size(), handle_diff, str.c_str(), bDetSupport, bDrawSupport, bUseTraditionEdge, bDetHandle, bDetTag, x_standard, y_standard, x_offset, y_offset, r_offset, support_min_area, edge_refine_search, edge_refine_step, edge_refine_gray, support_refine_search, support_refine_step, support_refine_segments, edge_select.size(), handleRegions.size(), handle_diff,
handle_size_min_ratio, handle_size_max_ratio, handle_search_ratio, handle_min_depth_coef, handle_min_area_coef, handle_edge_margin_coef, handle_size_min_ratio, handle_size_max_ratio, handle_search_ratio, handle_min_depth_coef, handle_min_area_coef, handle_edge_margin_coef,
BQ_area, BQ_energy, BQ_len, BQ_hj); BQ_area, BQ_energy, BQ_len, BQ_hj);
std::string str123 = buffer; std::string str123 = buffer;

@ -962,9 +962,10 @@ int BaseFuntonConfigJson::GetFunction(Json::Value value)
_config.supportDet.support_min_area = value_param["support_min_area"].asFloat(); _config.supportDet.support_min_area = value_param["support_min_area"].asFloat();
} }
// 支架边缘原图精细化(可选):沿边缘采样,从边缘向内找第一个 255 像素作为新边缘点, // 支架边缘原图精细化(可选):沿边缘采样,从边缘向内找第一个灰度 >= 阈值的像素作为新边缘点,
// edge_refine_search:最多向内搜索像素数(未配置默认 80) // edge_refine_search:最多向内搜索像素数(未配置默认 80)
// edge_refine_step :沿边采样步长(像素)(未配置默认 40,不需要每个点都找) // edge_refine_step :沿边采样步长(像素)(未配置默认 40,不需要每个点都找)
// edge_refine_gray :边缘点灰度阈值(0~255,灰度 >= 该值视为产品边缘)(未配置默认 240)
if (value_param["edge_refine_search"]) if (value_param["edge_refine_search"])
{ {
_config.supportDet.edge_refine_search = value_param["edge_refine_search"].asFloat(); _config.supportDet.edge_refine_search = value_param["edge_refine_search"].asFloat();
@ -973,6 +974,10 @@ int BaseFuntonConfigJson::GetFunction(Json::Value value)
{ {
_config.supportDet.edge_refine_step = value_param["edge_refine_step"].asFloat(); _config.supportDet.edge_refine_step = value_param["edge_refine_step"].asFloat();
} }
if (value_param["edge_refine_gray"])
{
_config.supportDet.edge_refine_gray = value_param["edge_refine_gray"].asFloat();
}
// 支架方向精细化(可选):模型 smallmask 精度低(1696×800 上采样回原图), // 支架方向精细化(可选):模型 smallmask 精度低(1696×800 上采样回原图),
// minAreaRect 求支架方向角误差大,改为在 detImg 灰度原图上拟合支架长边求方向角。 // minAreaRect 求支架方向角误差大,改为在 detImg 灰度原图上拟合支架长边求方向角。

Loading…
Cancel
Save