1.一种基于机器视觉的纱线管颜色分拣方法,其特征在于,该分拣方法包括以下具体步骤:步骤(1):判断纱管头尾端:
(a)从源图像f(x,y)中截取纱线管的左右两端图像fImage_Left(x,y)、fImage_Right(x,y),截取范围如下:其中Width,Height分别表示截取图像的宽度与高度,rows表示源纱管图像的最大宽度;
(b)对左右端口图像fImage_Left(x,y)、fImage_Right(x,y)的RGB三个通道分别做5*5模版的高斯滤波去除噪点,其公式如下:其中w表示高斯算子,a,b表示算子大小,fImage_x(x,y),表示左右端口图像的R、G和B三通道在点(x,y)处的像素值;
(c)对去除噪声的三个通道图像的各个像素点分别做梯度,并保留三个通道的边缘轮廓,其中梯度运算如下:Δx=fImage_u(x+1,y)-fImage_u(x-1,y)Δy=fImage_u(x,y+1)-fImage_u(x,y-1)其中fImage_u(x,y)表示去噪图像点(x,y)处RGB三个通道的像素值,G(x,y)表示三个通道梯度图中点(x,y)处的梯度值描绘子,并得到RGB三通道梯度图G_R、G_G和G_B;
(d)对G_R、G_G和G_B分别做二值化处理,拒绝函数如下:其中X表示R、G和B三个通道的梯度图在(x,y)处的梯度值;
同时为了排除端口图像中的边界噪点的影响,现将G_R、G_G和G_B三幅梯度图的上下五行,左右五列都设置为零,其余不变,得梯度图G_R’、G_G’和G_B’;
(e)将所得梯度图G_R’、G_G’和G_B’分别按行累加,当该行白点个数大于5个则记录行号,分别求得上下边界Up_Row、Down_Row,并计算R、G和B三个通道端口距离:Distance[i]=Up_Row-Down_Row,i=0,1,2比较数组Distance[0]、Distance[1]和Distance[2]得出左端口最大宽度LAver_Distance,同理可得右端口最大宽度RAver_Distance.
(f)若LAver_Distance大于RAver_Distance,则管尾在右,否则管尾在左;
步骤(2):纱线管管体颜色提取:
I从步骤(1)中截取的源图像f(x,y)分离出RGB三个颜色通道图,并剔除f(x,y)中x∈[rows/2-10,rows/2+10],y∈[col/2-10,col/2+10]的白色反光点对平均值求取的影响,记录白色反光点坐标集White;其中若三通道像素值White_R(x,y)>=235,White_G(x,y)>=
235,White_B>=235,则认为是白色反光点;其中col表示源纱管图像的最大高度;
II分别统计在区域x∈[rows/2-10,rows/2+10],y∈[col/2-10,col/2+10]中R、G和B三个通道的管体像素值,累加求和取平均;运算公式如下:Piple_B+=fR(i,j)
Piple_G+=fG(i,j)
Piple_R+=fB(i,j)
i∈[rows/2-10,rows/2+10],j∈[col/2-10,col/2+10],并且点(i,j)不在白色反光点中;同时统计累计的点数Total_number_Pixel;管体颜色计算如下:Piple_B=Piple_B/Total_Number_PixelPiple_G=Piple_G/Total_Number_PixelPiple_R=Piple_R/Total_Number_Pixel步骤(3):纱线管管尾颜色提取:
i统计从步骤(1)中截取的源图像f(x,y)中x∈[rows/2-8,rows/2+8],y∈[5,30],并剔除白色反光点;其中白色反光点阈值与步骤(2)中I相同;其拒绝函数如下:其中fR(x,y)、fG(x,y)和fB(x,y)为该点(x,y)处RGB三通道像素值,数组B[Length],G[Length],R[Length]大小Length为256,分别表示源图像f(x,y)的三个通道B、G和R颜色分布直方图;
ii分别从B、G和R的颜色分布直方图中寻找直方图中占比最大的像素值,即数组下标Max_B、Max_G和Max_R;查找函数如下:其中i∈[0,255],并且Head_R,Head_G和Head_B分别表示管尾颜色R,G和B三通道值;
Head_B=Max_B
Head_G=Max_G
Head_R=Max_R
步骤(4):纱管分拣:
①根据管体颜色Piple_B,Piple_G和Piple_R分别与库中记录的纱线管管体颜色Array分别做差求绝对值ΔR、ΔG和ΔB;
ΔR=abs(Piple_R-Array[i*6])ΔG=abs(Piple_G-Array[i*6+1])ΔB=abs(Piple_B-Array[i*6+2])将所得三个通道的差值经过第一次拒绝函数判断,若满足条件则将库中的该根纱管记录,其中拒绝函数如下:其中FA数组表示保留的入库纱管,i表示库中所有纱管;
②根据管尾颜色Head_R,Head_G,Head_B分别与库中记录的纱线管管尾颜色Array分别做差值取绝对值ΔR、ΔG和ΔB;
ΔR=abs(Head_R-Array[i*6+3])ΔG=abs(Head_G-Array[i*6+4])ΔB=abs(Head_B-Array[i*6+5])在步骤(4)-①的前提下,将所得三个通道的差值经过第二次拒绝函数判断,若满足条件则将库中的该根纱管记录,其中拒绝函数如下:其中HA数组表示记录保留的入库纱管,s表示数组FA所有值;
③根据所得数组FA和HA,若HA非空,则从该数组HA[i]找出ΔR,ΔG和ΔB和为最小值所对应的纱管标号Flag;否则从FA中找出ΔR,ΔG和ΔB和为最小值所对应的纱管标号Flag;
那么所得结果Flag为与当前纱管颜色最为接近的库中纱管;
④将结果Flag以8字节帧形式发送给主控STM32,STM32驱动对应击打电机送入对应通道实现分拣。