Mil 学习

MIL即为Matrox Imaging Library的缩写,是加拿大Matrox公司提供的图像处理函数库,主要是针对其公司生产的Matrox系列图像采集卡。


MatroxMorphis四通路图像采集卡


几个常用的函数如下: 

MappAllocDefault();一个默认的配置,Application、System、DigitizerDisplayBuffer都是按照默认的情况进行配置。

MappAlloc();分配一个MIL应用,该函数要在使用其它MIL函数之前使用。

MsysAlloc();配置一个硬件环境,指定使用得板卡类型,使用板卡序号。该函数要在分配buffer,display,digitizer前使用。

MdigAlloc();配置一个抽象的图像采集卡,指定可以使用的采集卡通道数,然后才能使用图像采集卡的函数。

MdispAlloc();配置一个display,把摄像机采集的图像使用该抽象进行显示。

MbufAlloc2d();分配一个2维的内存区。

MbufAllocColor();分配彩色内存区。

MappControl();改变指定的MIL应用的属性。

MsysControl();改变指定的系统的属性。

MdigControl();改变指定的图采卡属性。

MdispControl();改变指定的显示属性

MappInquire();获取指定的应用配置情况

MsysInquire();获取指定的应用系统情况

MdigInquire();获取指定的采集卡配置情况

MdispInquire();获取指定的显示配置情况

MbufInquire();获取指定内存块的配置情况

我使用的MatroxMorphis有四个通路,现在有两个摄像机需要采集数据。黑白摄像机在插在0通路,为CCIR机制;彩色摄像机插在1通路,为PAL机制。

目前最广泛的标准视频是

黑白:RS—170,使用在北美、日本、台湾等地区; CCIR,使用在欧洲、中国等地区。

彩色:NTSC,使用在北美、日本、台湾等地区; PAL,使用在欧洲、中国等地区。

下面分别采集两个摄像机视频数据程序的核心地方

0通路的黑白摄像机

MIL_ID  MilApplication  ;
MIL_ID  MilSystem      ;
MIL_ID  MilDigitizer   ;
MIL_ID  MilDisplay     ;
MIL_ID  MilImageDisp   ;
MIL_ID MilImage   ;

 MappAlloc(M_DEFAULT,&MilApplication);
 MsysAlloc(M_SYSTEM_MORPHIS,M_DEV0,M_COMPLETE,&MilSystem);
 MdigAlloc(MilSystem,M_DEV0,"M_DEFAULT",M_DEFAULT,&MilDigitizer);
 MdispAlloc(MilSystem,M_DEFAULT,"",M_DEFAULT,&MilDisplay); 
 g_BufSizeX = ((unsigned int) MdigInquire(MilDigitizer, M_SIZE_X, M_NULL));
 g_BufSizeY = ((unsigned int) MdigInquire(MilDigitizer, M_SIZE_Y, M_NULL));
 MbufAlloc2d( MilSystem, ImageWidth, ImageHeight,8+M_UNSIGNED,
             M_IMAGE+M_GRAB+M_PROC,  &MilImage);
 MbufAlloc2d( MilSystem, ImageWidth, ImageHeight,8+M_UNSIGNED,
            M_IMAGE+M_DISP,&MilImageDisp);
 MbufClear( MilImageDisp, 0 );

int n=100;

while(n--)

  MdigGrab(MilDigitizer, MilImage8[0]);
  MbufCopy(MilImage8[0],MilImageDisp);     

 }

 MdispDeselect(MilDisplay, MilImageDisp);
 MbufFree(MilImageDisp);
 MbufFree(MilImage); 
 MdispFree(MilDisplay); 
 MdigFree(MilDigitizer); 
 MsysFree(MilSystem); 
 MappFree(MilApplication);

 

1通路的彩色摄像机

MIL_ID  ColorMilApplication  ;
MIL_ID  ColorMilSystem      ;
MIL_ID  ColorMilDigitizer   ;
MIL_ID  ColorMilDisplay     ;
MIL_ID  ColorMilImageDisp   ;
MIL_ID ColorMilImage   ;

 MappAlloc(M_DEFAULT,&ColorMilApplication);
 MsysAlloc(M_SYSTEM_MORPHIS,M_DEV0,M_COMPLETE,&ColorMilSystem);


 MdigAlloc(ColorMilSystem,M_DEV0,
  "C:\\Program Files\\MatroxImaging\\Drivers\\Morphis\\dcf\\PAL.DCF" ,
  M_DEFAULT,&ColorMilDigitizer);
 MdigChannel(ColorMilDigitizer,M_CH1);//默认的通路为0,改为1通路
 MdispAlloc(ColorMilSystem,M_DEFAULT,"",M_DEFAULT,&ColorMilDisplay);

 long SizeBand = MdigInquire(ColorMilDigitizer,M_SIZE_BAND, M_NULL);
 longSizeX    =MdigInquire(ColorMilDigitizer, M_SIZE_X, M_NULL);
 longSizeY    =MdigInquire(ColorMilDigitizer, M_SIZE_Y, M_NULL);

 MbufAllocColor(ColorMilSystem, SizeBand,SizeX, SizeY, 8L+M_UNSIGNED,
  M_IMAGE + M_DISP + M_NON_PAGED,&ColorMilImageDisp);
 MbufClear(ColorMilImageDisp,M_BLACK);MbufAllocColor(ColorMilSystem, SizeBand, SizeX, SizeY,8L+M_UNSIGNED,
  M_IMAGE + M_GRAB + M_ON_BOARD,&ColorMilImage);

 int k=100;
 while(k--)
 {
  MdigGrab(ColorMilDigitizer,ColorMilImage);
  MbufCopy(ColorMilImage8[0],ColorMilImageDisp);

 }

 MbufFree(ColorMilImageDisp);
 MbufFree(ColorMilImage);
 MdispFree(ColorMilDisplay);
 MdigFree(ColorMilDigitizer);
 MsysFree(ColorMilSystem);
 MappFree(ColorMilApplication);

今天学习了如何对图像采集卡采集的每一帧图像进行图像处理,主要是从MIL的数据结构中读出图像的具体到像素的数据。SizeX为图像的长度,SizeY为图像的宽度,SizeBand为图像的颜色通道数。从读出的数据分析可以知道,具体图像像素数据是从上到下,从作到右存储的。

 unsigned char *data=new unsignedchar[SizeX*SizeBand*SizeY];
 unsigned char red=0,green=0,blue=0;
 int k=10;//连续采集的10帧图像
 int i,j;
 while(k--)
 {
  MdigGrab(ColorMilDigitizer,ColorMilImage8[0]);

  MbufGetColor(ColorMilImage8[0],M_PACKED+M_BGR24,M_ALL_BANDS,data);
  for(i=0;i<SizeY/2;i++)
   for(j=0;j<SizeX*SizeBand;j+=SizeBand)
   {
    blue=*(data+i*SizeX*SizeBand+j+0);
    green=*(data+i*SizeX*SizeBand+j+1);
    red=*(data+i*SizeX*SizeBand+j+2);   
   }
  MbufPutColor(ColorMilImage8[0],M_PACKED+M_BGR24,M_ALL_BANDS,data);

  MbufCopyColor(ColorMilImage8[0],ColorMilImageDisp,M_ALL_BANDS);

 }
 delete data;

<think>好的,我现在需要回答用户关于多实例学习MIL)的概念、应用和实现方法的问题。首先,我得确认自己对MIL的基本理解是否正确。多实例学习是一种监督学习范式,其中训练样本被组织成包(bag),每个包包含多个实例,但只有包级别的标签。例如,在药物活性预测中,一个分子可能有多个构象,整个分子被标记为有效或无效,而每个构象的标签未知。这种情况下,MIL通过包级别的标签来学习实例级别的分类器。 接下来,用户要求了解应用场景。我需要回忆常见的MIL应用领域。医疗影像分析是一个重要方向,比如病理切片分类,每个切片被分为多个区域(实例),但只有整个切片的诊断标签。此外,图像分类、文本分类(如文档分类)、声音事件检测等也是典型应用。 然后是实现方法部分。传统方法包括基于实例的方法,比如MIL-SVM,以及基于包的方法,如差异性核。深度学习方面,注意力机制和Transformer结构被广泛应用,比如项目[^2]提到的基于注意力的方法,可以自动学习实例的重要性权重。另外,用户提供的参考[^3]中的DTFD-MIL框架使用了双重特征蒸馏,这可能涉及到多阶段特征提取和集成。 需要确保回答的结构清晰,分点说明概念、应用和实现方法,并引用提供的资料。例如,在传统方法部分引用[^1],在深度学习方法提到[^2]和。同时,生成相关问题时要覆盖概念、应用、优化方法等。 最后,检查是否符合格式要求:行内数学公式用$...$,独立公式用$$...$$,中文回答,引用标注正确。确保没有使用Markdown格式,代码块用三个反引号包裹,相关问题部分用§§符号分隔。</think>### 多实例学习MIL)概念、应用与实现方法 #### 一、概念 多实例学习(Multiple Instance Learning, MIL)是一种弱监督学习范式,其特点是训练数据以“包”(bag)的形式组织,每个包包含多个实例(instance),但仅提供包级别的标签(如正包或负包)。核心假设是: - **正包**:至少包含一个正实例; - **负包**:所有实例均为负实例。 例如,在药物活性预测中,一个分子(包)可能有多个构象(实例),若分子有效(正包),则至少有一个构象具有活性;若无效(负包),则所有构象均无活性。 #### 二、应用场景 1. **医学影像分析** - 病理切片分类:将整张切片视为包,局部区域为实例,通过包级别标签(如癌症/非癌症)学习关键区域的判别特征[^3]。 - 医学图像分割:弱监督条件下定位病灶区域。 2. **图像分类** 弱标注图像分类,例如仅知图像是否包含某物体(包级别标签),无需标注物体位置。 3. **文本处理** 文档分类:文档为包,段落或句子为实例,通过文档标签推断关键段落。 4. **生态监测** 声音事件检测:音频片段为包,短时音频帧为实例,判断片段中是否包含目标声音。 #### 三、实现方法 ##### 1. 传统方法 - **基于实例的方法**:假设包标签由单个关键实例决定,例如MIL-SVM,通过优化包中至少一个实例满足分类边界。 - **基于包的方法**:直接建模包的整体特征,如差异性核(Diverse Density)计算实例与多个正包的重叠度[^1]。 ##### 2. 深度学习方法 - **注意力机制**:通过注意力权重自动学习实例重要性,例如: ```python class AttentionMIL(nn.Module): def __init__(self, input_dim): super().__init__() self.attention = nn.Sequential( nn.Linear(input_dim, 128), nn.Tanh(), nn.Linear(128, 1) ) def forward(self, instances): attn_scores = self.attention(instances) attn_weights = F.softmax(attn_scores, dim=1) return (attn_weights * instances).sum(dim=1) ``` 该模型通过注意力权重加权实例特征,生成包表示。 - **双重特征蒸馏**:如DTFD-MIL框架,通过多阶段特征蒸馏增强包表示,解决病理切片中实例冗余问题。 - **Transformer结构**:利用自注意力捕捉实例间依赖关系,提升长距离交互建模能力。 #### 四、关键公式 包表示生成可表示为: $$H_{\text{bag}} = \sum_{i=1}^n \alpha_i h_i$$ 其中$h_i$为实例特征,$\alpha_i$为注意力权重,满足$\sum \alpha_i = 1$。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值