当前位置:首页 » 操作系统 » 图片比较算法

图片比较算法

发布时间: 2022-04-17 18:41:25

A. 图像二值化的算法比较

OTSU的中心思想是阈值T应使目标与背景两类的类间方差最大。
//用类间方差最大思想计算阈值
int Threshold(int *hist) //compute the threshold
{
float u0, u1;
float w0, w1;
int count0;
int t, maxT;
float devi, maxDevi = 0; //方差及最大方差
int i;
int sum = 0;
for (i = 0; i < 256; i++)
{
sum = sum + hist[i];
}
for (t = 0; t < 255; t++)
{
u0 = 0; count0 = 0;
//阈值为t时,c0组的均值及产生的概率
for (i = 0; i <= t; i++)
{
u0 += i * hist[i]; count0 += hist[i];
}
u0 = u0 / count0; w0 = (float)count0/sum;
//阈值为t时,c1组的均值及产生的概率
u1 = 0;
for (i = t + 1; i < 256; i++)
{
u1 += i * hist[i];
}
u1 = u1 / (sum - count0); w1 = 1 - w0;
//两类间方差
devi = w0 * w1 * (u1 - u0) * (u1 - u0);
//记录最大的方差及最佳位置
if (devi > maxDevi)
{
maxDevi = devi;
maxT = t;
}
}
return maxT;
}
//二值化处理
void OTSU(IplImage *src, IplImage *dst)
{
int i = 0, j = 0;
int wide = src->widthStep;
int high = src->height;
int hist[256] = {0};
int t;
unsigned char *p, *q;
for (j = 0; j < high; j ++)
{
p = (unsigned char *)(src->imageData + j * wide);
for (i = 0; i < wide; i++)
{
hist[p[i]]++; //统计直方图
}
}
t = Threshold(hist);
for (j = 0; j < high; j ++)
{
q = (unsigned char *)(dst->imageData + j * wide);
p = (unsigned char *)(src->imageData + j * wide);
for (i = 0; i < wide; i++)
{
q[i] = p[i] >= t ? 255 : 0;
}
}
}
OTSU算法对不均匀光照的图片不能产生很好的效果。 另外一个Kittler算法,是一种快速的全局阈值法。它的效果不比OTSU差多少,但速度快好多倍,如果可以应用在图像质量不错的环境。
它的中心思想是,计算整幅图像的梯度灰度的平均值,以此平均值做为阈值。
//kittler算法
for (i=1;i<high-1;i++)
{
plineadd=src->imageData+i*wide;
pNextLine=src->imageData+(i+1)*wide;
pPreLine=src->imageData+(i-1)*wide;
for(j=1;j<wide-1;j++)
{
//求水平或垂直方向的最大梯度
Grads=MAX(abs((uchar)pPreLine[j]-(uchar)pNextLine[j]),abs((uchar)plineadd[j-1]-(uchar)plineadd[j+1])); //max(xGrads,yGrads)
sumGrads += Grads;
//梯度与当前点灰度的积
sumGrayGrads += Grads*((uchar)plineadd[j]);
}
}
threshold=sumGrayGrads/sumGrads;
// printf(%d ,threshold);
for(i=0;i<high;i++)
{
plineadd=src->imageData+i*wide;
pTempLine=kittler->imageData+i*wide;
for(j=0;j<wide;j++)
{
pTempLine[j]=(uchar)plineadd[j]>threshold?255:0;
}
}

B. 图像比对的原理或者算法

有噪声情况下。1、配准;2、两张图的图像块分别计算特征(lbp,sift等);3、计算特征的距离(欧式距离等)。在matlab或opencv下都可以。

C. java 对比图片相似度的算法。。说说想法也行

每张图分成四块,将每部分的图片混成一种纯色,对比这四个纯色可以筛掉大部分的图片

D. 图像算法A和B两张图片,找出B与A不同的部分

说的很清楚,你也把思路说出来了,就是这样的,加快网络的传输速度。
至于比较方法,比较像素点的方向是对的,不过我想它不是上来就比较像素点,因为这样效率较低,而是采用的多函数嵌套,方法如下:
把图片分成几大块,比如平均分4块,然后每一块进行比对(进行图片的模糊匹配,而不是精确的像素匹配),找出不同大块,然后再分块,以此下去,找到比较小的块(这个根据编程定义到底多小算小),然后再进行像素比对,这样效率能够更加提高。

E. 实现图片对比度和亮度的算法是什么

亮度就是一幅照片中的黑白灰分布情况,对比度是亮部和暗部的差距,饱和度就是颜色纯度

F. 图像识别算法都有哪些

图像识别,是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对像的技术。一般工业使用中,采用工业相机拍摄图片,然后再利用软件根据图片灰阶差做进一步识别处理,图像识别软件国外代表的有康耐视等,国内代表的有图智能等。另外在地理学中指将遥感图像进行分类的技术。

G. 有什么可以对比两张图片得出相似度的软件。

呵呵,这个软件我还真有,DuplicatePhotoFinder-这个软件不旦可以找相同图片还可以找相似图片的软件哟
名字不一样,大小不一样都能找得出来。只要内容相同或相似!我经常用这个软件清理我的图片

H. 求图像做差算法,高分,可以现金。

别试了,无效。我的算法和您的问题完全不相干,您需要实现这样的高级功能只能找公司付钱做。以目前还很浅显的知识来看,我觉得这种问题是非常难解决的,因为你要寻求的不同区域只有微小的变化。没能帮助您,很抱歉。

I. 比较图片中人脸的相似程度是使用什么样的算法,并且计算得到眼睛,鼻子等相似程度有没有具体的实现

OPENCV里就有。安装后,DATA目录下,haarcascades目录下,haarcascade_frontalface_default.xml就不错。这是人脸识别的数据。
用法请根据这个文件名找吧,记得就是调用OPENCV里的某个函数(C++),用这个文件名和图作参数,返回的就是图中人脸的位置。
这里是你用得着的部分:
const char* cascadeFile = "haarcascade_frontalface_alt.xml";
const char* folder = "C:\\Program Files\\OpenCV\\data\\haarcascades\\";
char path[1024];
sprintf(path, "%s%s", folder, cascadeFile);
CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*) cvLoad(path, 0, 0, 0);
//然后cascade就存着需要的那个CvHaarClassifierCascade了。
......
CvSeq* faces = cvHaarDetectObjects(img, cascade, storage,
1.1, 2, CV_HAAR_DO_CANNY_PRUNING,
cvSize(source->getWidth() >> 7, source->getHeight() >> 7));
这句中,img是一个IplImage*,我自己的项目是从摄像头弄来的,我估计你需要直接用opencv载入图片。cascade就是载入的OPENCV的样本数据,storage是一个空间,我用的CvMemStorage* storage = cvCreateMemStorage(0)创建的,detect objects之前我还用了cvClearMemStorage(storage),1.1是缩放,2是检测像素大小,CV_HAAR_DO_CANNY_PRUNING是比较方法, 一个OPENCV自带的常量。最后cvSize的返回值是允许的最小脸部大小。每个变量都解释到了吧。
之后faces->total就是找到几个脸。用cvGetSeqElem(faces, i)来取每个脸的数据,取出来的东西是(CvRect*),要记得TYPECAST,例如CvRect face1 = *((CvRect*) cvGetSeqElem(faces, 0))。这样得到的CvRect有4个变量face1.x,face1.y,face1.width,face1.height就是人脸在图片中的位置了。

热点内容
倒三角java编译 发布:2024-09-30 05:05:39 浏览:17
电脑文件夹怎么发到qq 发布:2024-09-30 04:37:48 浏览:651
苹果手机网络缓存在哪里清除安卓 发布:2024-09-30 04:20:52 浏览:408
spl数据库 发布:2024-09-30 04:15:09 浏览:90
车辆解压需要什么材料 发布:2024-09-30 04:02:15 浏览:573
重差算法 发布:2024-09-30 04:00:48 浏览:105
怎么设置华为5700交换机配置 发布:2024-09-30 03:47:26 浏览:613
大数据存储问题 发布:2024-09-30 03:42:25 浏览:262
旧电脑如何做游戏服务器 发布:2024-09-30 03:42:25 浏览:374
windows服务器和linux服务器 发布:2024-09-30 03:33:14 浏览:399