这是一个易于使用的哭声,它大大减少了单片机的运算量,因此该算法g可以在200M主频单片机上平稳运行70x120的图像,并且还可以处理其他事情.

当然还有另一个功能是快速排序,用于双边阈值检测:
//=============快速排序============LQ====
void Quicksort(float array[], uint8 maxlen, uint8 begin, uint8 end)
{
uint8 i, j;
if(begin < end)
{
i = begin + 1; // 将array[begin]作为基准数,因此从array[begin+1]开始与基准数比较!
j = end; // array[end]是数组的最后一位
while(i < j)
{
if(array[i] > array[begin]) // 如果比较的数组元素大于基准数,则交换位置。
{
Swap(&array[i], &array[j]); // 交换两个数
j--;
} //end of if
else
{
i++; // 将数组向后移一位,继续与基准数比较。
} //end of if else
} //end of while
/* -------------------------------------------------------------------------------------------------
*跳出while循环后,i = j。
* 此时数组被分割成两个部分 --> array[begin+1] ~ array[i-1] < array[begin]
* --> array[i+1] ~ array[end] > array[begin]
* 这个时候将数组array分成两个部分,再将array[i]与array[begin]进行比较,决定array[i]的位置。
* 最后将array[i]与array[begin]交换,进行两个分割部分的排序!以此类推,直到最后i = j不满足条件就退出!
/*-------------------------------------------------------------------------------------------------*/
if(array[i] >= array[begin]) // 这里必须要取等“>=”,否则数组元素由相同的值时,会出现错误!
{
i--;
}
Swap(&array[begin], &array[i]); // 交换array[i]与array[begin]
Quicksort(array, maxlen, begin, i);
Quicksort(array, maxlen, j, end);
} //end of if(begin < end)
} //end of function Quicksort
//==========交换两个数的值======LQ===
void Swap(float *a, float *b)
{
float temp;
temp = *a;
*a = *b;
*b = temp;
} //end of function Swap
这是直接从Internet复制的.....
查看其他跟踪元素的效果:



最后,附加了部分matlab程序:
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-231793-2.html
这市场只能投机啊