opencv 학습 시리즈: OSTU 알고리즘 선택 적응 한도 값
//-----------------------------------OpenCV 1-------------------------------------
// :OSTU
// 2016 10 Created by (Visual Studio 2013+OpenCV2.4.9)
#include
#include
#include
#include
using namespace cv;
using namespace std;
//#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
int otsu(IplImage *image)
{
assert(NULL != image);// ,
int width = image->width;
int height = image->height;
int x = 0, y = 0;
int pixelCount[256];
float pixelPro[256];
int i, j, pixelSum = width * height, threshold = 0;
uchar* data = (uchar*)image->imageData;
//
for (i = 0; i < 256; i++)
{
pixelCount[i] = 0;
pixelPro[i] = 0;
}
//
for (i = y; i < height; i++)
{
for (j = x; jwidthStep + j]]++;
}
//
for (i = 0; i < 256; i++)
{
pixelPro[i] = (float)(pixelCount[i]) / (float)(pixelSum);
}
// ostu ,
// [0,255], ,
float w0, w1, u0tmp, u1tmp, u0, u1, u, deltaTmp, deltaMax = 0;
for (i = 0; i < 256; i++)//i
{
w0 = w1 = u0tmp = u1tmp = u0 = u1 = u = deltaTmp = 0;
for (j = 0; j < 256; j++)// i=0,1,2,3...255
{
if (j <= i) //
{
// i ,
w0 += pixelPro[j];
u0tmp += j * pixelPro[j];
}
else //
{
// i ,
w1 += pixelPro[j];
u1tmp += j * pixelPro[j];
}
}
u0 = u0tmp / w0; //
u1 = u1tmp / w1; //
u = u0tmp + u1tmp; //
//
deltaTmp = w0 * (u0 - u)*(u0 - u) + w1 * (u1 - u)*(u1 - u);
//
if (deltaTmp > deltaMax)
{
deltaMax = deltaTmp;
threshold = i;
}
}
// ;
return threshold;
}
int main(int argc, char* argv[])
{
IplImage* srcImage = cvLoadImage("F:\\workplace\\opencv_training\\test2.png", 0);
assert(NULL != srcImage);
cvNamedWindow("src");
cvShowImage("src", srcImage);
IplImage* biImage = cvCreateImage(cvGetSize(srcImage), 8, 1);
//
int threshold = otsu(srcImage);
//
cvThreshold(srcImage, biImage, threshold, 255, CV_THRESH_BINARY);
cvNamedWindow("binary");
cvShowImage("binary", biImage);
cvWaitKey(0);
cvReleaseImage(&srcImage);
cvReleaseImage(&biImage);
cvDestroyWindow("src");
cvDestroyWindow("binary");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio 2017에서 OpenCV 템플릿 프로젝트 만들기・Windows 7 Professional 64bit ・Visual Studio 2017 Version 15.9.14 · OpenCV 3.4.1 OpenCV의 도입 방법 등은 아래를 참조하십시오. Visual Stu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.