Emgucv不完整图像分割试验(十八)——非标GLCM(C#版本)

本文介绍了一种C#实现的非标准灰度共生矩阵(GLCM)方法,用于处理不规则图形的图像分割问题。由于EmguCV中缺少适合C#的非标GLCM功能,作者通过自己的理解编写了相关代码,并提出在处理时需要注意不能简单地通过剔除灰度0-0来避免干扰。文章提供了一个类实现,并分享了调用示例。
摘要由CSDN通过智能技术生成

图像切割无外乎用颜色(rgb,hsv等)形状(凹点,凸包,各种矩)区分,

纹理也很多,常用GLCM灰度共生矩阵,欺负人,又是opencv版本有,适合C#版本的没有,

即便有,也大多是基于标准矩形的,但实际应用的时候,我们往往要分析不规则图形。

本来想做个mask图像后,把灰度0-0(意思是某像素为0,该左侧的像素也为零,具体参考GLCM)剔除就行了,后来想想不对,万一图像内部也有0-0的像素,剔除了会造成干扰的。

水平不高,硬写了一段c#版本的非标GLCM,各位读者先凑合用吧,有心的帮我完善一下。

写成类了,如下:

256表示灰度级数,bp是灰度图,mask是灰度图的蒙版,a和b表示灰度值

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Drawing.Imaging;

namespace Count_Num
{
    public class GLCM
    {
        public double[,] glmc;
        double energy;      // 能量 
        double entropy;     // 熵
        double contrast;    // 对比度
        double idMoment;    // 逆差分矩, inverse difference moment

        public double Energy { get => energy; set => energy = value; }
        public double Entropy { get => entropy; set => entropy = value; }
        public double Contrast { get => contrast; set => contrast = value; }
        public double IdMoment { get => idMoment; set => idMoment = value; }

        public GLCM(int size)
        {
            glmc = new double[size, size];
        }


        public unsafe double[,] calGLCM(Bitmap bp, Bitmap mask,int Size,int kind)
        {
            double[,] glmc = new double[Size, Size];

            for (int i = 0; i < Size; i++)
            {
                for (int j = 0; j < Size; j++)
                {
                    if (kind &
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值