我需要检测这些线的宽度:

这些线是平行的并且有一些噪音.
目前,我所做的是:
1.使用减薄找到中心(张颂)
ZhanSuenThinning(binImage, thin);
Run Code Online (Sandbox Code Playgroud)
2.计算距离变换
cv::distanceTransform(binImage, distImg, CV_DIST_L2, CV_DIST_MASK_5);
Run Code Online (Sandbox Code Playgroud)
3.累积中心周围的一半距离
double halfWidth = 0.0;
int count = 0;
for(int a = 0; a < thinImg.cols; a++)
for(int b = 0; b < thinImg.rows; b++)
if(thinImg.ptr<uchar>(b, a)[0] > 0)
{
halfWidth += distImg.ptr<float>(b, a)[0];
count ++;
}
Run Code Online (Sandbox Code Playgroud)
4.最后,获得实际宽度
width = halfWidth / count * 2;
Run Code Online (Sandbox Code Playgroud)
结果,不太好,在1-2像素左右是错误的.在更大的图像上,结果更糟,有什么建议吗?