Canny 边缘提取的最大最小值设置很麻烦,合理的高低阈值选择是一个很重要的问题,一般做法对不同图像采取相同的默认值,但会导致对某一类图像的处理效果好,对另一些图像处理效果不好。
一维最大熵的代码来自连接11,感谢博主的分享。
帮助理解下面是一维最大熵公式:
公式来自连接22,我一开始用的是连接2的代码但不知道为什么得到的最大熵值为0。
int main()
{
Mat src = imread("photo.bmp");
int MaxThreshold;
MaxThreshold = MaxEntropy(src);
Canny(src , src , MaxThreshold / 3, MaxThreshold);
imshow("canny自适应阈值", src );
printf("max:%d\n", MaxThreshold);
}
//计算当前熵
float CalEntropy(Mat hist, int threshold)
{
float BackgroundSum = 0