| | |
| | | /// 图像增强算法-边缘增强 |
| | | /// </summary> |
| | | /// <param name="ho_Image">待测图片</param> |
| | | /// <param name="hv_ImageEnhancementType">滤波器类型(mean/gauss/median)</param> |
| | | /// <param name="hv_Wid">掩膜宽</param> |
| | | /// <param name="hv_High">掩膜高</param> |
| | | /// <param name="hv_Fac">增强因子</param> |
| | | /// <param name="hv_Row1">起始纵坐标</param> |
| | | /// <param name="hv_Column1">起始横坐标</param> |
| | | /// <param name="hv_Row2">结束纵坐标</param> |
| | | /// <param name="hv_Column2">结束横坐标</param> |
| | | public static void Emphsize(HObject ho_Image, out HObject ho_OutImage, HTuple hv_ImageEnhancementType, HTuple hv_Wid, HTuple hv_High, HTuple hv_Fac) |
| | | |
| | | public static void ImageEnhancement(HObject ho_Image, out HObject ho_OutImage, string hv_ImageEnhancementType, int hv_Wid, int hv_High, double hv_Fac) |
| | | { |
| | | HOperatorSet.GenEmptyObj(out ho_OutImage); |
| | | |
| | | try |
| | | { |
| | | HTuple hv_ImageEnhancementTypeOut = new HTuple(); |
| | | hv_ImageEnhancementTypeOut.Dispose(); |
| | | hv_ImageEnhancementTypeOut = new HTuple(hv_ImageEnhancementType); |
| | | |
| | | hv_Wid.Dispose(); |
| | | hv_High.Dispose(); |
| | | ho_OutImage.Dispose(); |
| | | |
| | | //设置图像增强算法 |
| | | if ((int)(new HTuple(hv_ImageEnhancementTypeOut.TupleEqual("emphasize"))) != 0) |
| | | // 根据滤波器类型执行相应操作 |
| | | switch (hv_ImageEnhancementType.ToLower()) |
| | | { |
| | | hv_ImageEnhancementTypeOut.Dispose(); |
| | | hv_ImageEnhancementTypeOut = "emphasize"; |
| | | HOperatorSet.Emphasize(ho_Image, out ho_OutImage, hv_Wid, hv_High, hv_Fac); |
| | | case "emphasize": |
| | | HOperatorSet.Emphasize(ho_Image, out ho_OutImage, hv_Wid, hv_High, hv_Fac); |
| | | break; |
| | | |
| | | case "scaleimagemax": |
| | | HOperatorSet.ScaleImageMax(ho_Image, out ho_OutImage); |
| | | break; |
| | | |
| | | case "equhisto": |
| | | HOperatorSet.EquHistoImage(ho_Image, out ho_OutImage); |
| | | break; |
| | | |
| | | default: |
| | | throw new ArgumentException($"不支持的滤波器类型: {hv_ImageEnhancementType}"); |
| | | } |
| | | else if ((int)(new HTuple(hv_ImageEnhancementTypeOut.TupleEqual("equHisto"))) != 0) |
| | | { |
| | | hv_ImageEnhancementTypeOut.Dispose(); |
| | | hv_ImageEnhancementTypeOut = "equHisto"; |
| | | |
| | | } |
| | | else |
| | | { |
| | | hv_ImageEnhancementTypeOut.Dispose(); |
| | | hv_ImageEnhancementTypeOut = "scaleMax"; |
| | | } |
| | | |
| | | |
| | | |
| | | HOperatorSet.EquHistoImage(ho_Image, out ho_OutImage); |
| | | |
| | | |
| | | return; |
| | | } |
| | | catch (HalconException HDevExpDefaultException) |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | hv_Wid.Dispose(); |
| | | hv_High.Dispose(); |
| | | |
| | | throw HDevExpDefaultException; |
| | | // 确保异常时释放资源 |
| | | ho_OutImage?.Dispose(); |
| | | throw new Exception($"图像滤波失败: {ex.Message}", ex); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 图像增强算法-比例增强 |
| | | /// 图像滤波 |
| | | /// </summary> |
| | | /// <param name="ho_Image">待测图片</param> |
| | | /// <param name="ho_OutImage">输出图片</param> |
| | | /// <param name="hv_FilterType">滤波器类型(mean/gauss/median)</param> |
| | | /// <param name="hv_Wid">掩膜宽</param> |
| | | public static void ScaleImageMax(HObject ho_Image, out HObject ho_OutImage) |
| | | /// <param name="hv_High">掩膜高</param> |
| | | /// <param name="hv_Size">高斯核尺寸</param> |
| | | public static void Filter(HObject ho_Image, out HObject ho_OutImage, string hv_FilterType, int hv_Wid, int hv_High, int hv_Size) |
| | | { |
| | | // 初始化输出对象 |
| | | HOperatorSet.GenEmptyObj(out ho_OutImage); |
| | | |
| | | try |
| | | { |
| | | ho_OutImage.Dispose(); |
| | | HOperatorSet.ScaleImageMax(ho_Image, out ho_OutImage); |
| | | return; |
| | | // 根据滤波器类型执行相应操作 |
| | | switch (hv_FilterType.ToLower()) |
| | | { |
| | | case "mean": |
| | | HOperatorSet.MeanImage(ho_Image, out ho_OutImage, hv_Wid, hv_High); |
| | | break; |
| | | |
| | | case "gauss": |
| | | case "guass": // 兼容拼写错误 |
| | | HOperatorSet.GaussFilter(ho_Image, out ho_OutImage, hv_Size); |
| | | break; |
| | | |
| | | case "median": |
| | | HOperatorSet.MedianRect(ho_Image, out ho_OutImage, hv_Wid, hv_High); |
| | | break; |
| | | |
| | | default: |
| | | throw new ArgumentException($"不支持的滤波器类型: {hv_FilterType}"); |
| | | } |
| | | } |
| | | catch (HalconException HDevExpDefaultException) |
| | | catch (Exception ex) |
| | | { |
| | | throw HDevExpDefaultException; |
| | | // 确保异常时释放资源 |
| | | ho_OutImage?.Dispose(); |
| | | throw new Exception($"图像滤波失败: {ex.Message}", ex); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 图像增强算法-直方图均衡化 |
| | | /// </summary> |
| | | /// <param name="ho_Image">待测图片</param> |
| | | /// <param name="hv_Wid">掩膜宽</param> |
| | | public static void EquHistoImage(HObject ho_Image, out HObject ho_OutImage) |
| | | { |
| | | HOperatorSet.GenEmptyObj(out ho_OutImage); |
| | | try |
| | | { |
| | | ho_OutImage.Dispose(); |
| | | HOperatorSet.EquHistoImage(ho_Image, out ho_OutImage); |
| | | return; |
| | | } |
| | | catch (HalconException HDevExpDefaultException) |
| | | { |
| | | throw HDevExpDefaultException; |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 卡尺算法 |