最大熵阈值分割——opencv与matlab实现

本文介绍了最大熵阈值分割的原理,并提供了使用opencv和MATLAB实现该方法的代码。作者通过探讨熵随阈值变化的特性,阐述了最大熵在图像分割中的应用。
摘要由CSDN通过智能技术生成


这篇文章的opencv实现代码源于http://blog.csdn.net/yangtrees/article/details/8785377这篇博客,自己稍加改动,再此对博主表示感谢。

1.最大熵原理

原理自己还是不是很清楚,-p*log(p)当p增大的时候log(p)减小,那么随着阈值的增加,前景(或者背景)的熵值的变化应该不是单调的(没有证明,只是自己感觉)。但我试着求出随着阈值变化的背景熵时,发现基本是单调变化的。额,写到这里突然发现高数都白学了,求导结果为-(1+log(p)),这个是大于0的,也就是会一直单调增加,无极值。

2.opencv代码

  下面给出完整的(有点冗余)。
#include <opencv2\opencv.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include <iostream>
#include <string>
#include <windows.h>
#include "Plate.h"
#include <stdlib.h>
#include <ctime>
#define window_name "均衡化后直接二值化,呵呵"
using namespace cv;
using namespace std;


typedef enum {back,object} entropy_state;  
float total;  
//绘制hist;  
Mat drawHist(Mat hist,int bins,int height,Scalar rgb)  
{  
    double maxVal=0;  
    minMaxLoc(hist,0,&maxVal,0,0);  
    int scale=1;  
    Mat histImg = Mat::zeros(height, bins, CV_8UC3);  
    float *binVal = hist.ptr<float>(0);  
    for (int i=0; i<bins; i++)  
    {  
        int intensity = cvRound(binVal[i]*height/maxVal);  
        rectangle(histImg,Point(i*scale,0),  
            Point((i+1)*scale,(intensity)),rgb,CV_FILLED);  
    }  
    flip(hist
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值