24小时热门版块排行榜    

查看: 2708  |  回复: 22
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

Allen2014

铜虫 (小有名气)

[求助] 图像分割问题求助(已进行了一部分图像算法处理)

现在有一副图像,我要把图中被红色线圈出来的不规则黑色缺陷进行分割出来,下面谈一下我的具体做法:首先,由于图像的对比度太低,我先进行了图像增强,然后利用canny算子进行了边缘检测;接下来,本想利用腐蚀和膨胀来过滤掉干扰的线条之类的,但是形态学操作根本达不到我想要的要求,所以现在困在边缘检测以后,不知道接下来怎么把图像中,白色条码中的小黑色缺陷给分割出来,恳请各位高手能给我指点一下,谢谢!(我是用matlab编写的算法)。下面是matlab处理后的图像。
图像分割问题求助(已进行了一部分图像算法处理)
灰度图像.jpg


图像分割问题求助(已进行了一部分图像算法处理)-1
对比度增强后的图像.jpg


图像分割问题求助(已进行了一部分图像算法处理)-2
canny边缘检测.jpg


图像分割问题求助(已进行了一部分图像算法处理)-3
canny边缘检测-标记.jpg
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Allen2014

铜虫 (小有名气)

引用回帖:
2楼: Originally posted by feixiaolin at 2013-11-10 09:50:04
图像旋转,投影,+模板匹配。

您好:我按照您的思路,进行了“图像旋转”的图像处理,首先通过hough变换(其中我尝试修改hough相关函数的参数值,始终不能很好地得到只检测出白色条码长边缘的直线),运行效果如下图所示。其中按照计算的角度旋转后,发现白色条码上的有些缺陷图像的边缘被剔除了,不知再继续对图像进行投影能否检测出缺陷,恳请您能指教一下,谢谢!
图像分割问题求助(已进行了一部分图像算法处理)-4
Hough变换图.jpg


图像分割问题求助(已进行了一部分图像算法处理)-5
hough直线检测图.jpg


图像分割问题求助(已进行了一部分图像算法处理)-6
旋转以后的图像.jpg

3楼2013-11-10 21:32:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Allen2014

铜虫 (小有名气)

引用回帖:
4楼: Originally posted by feixiaolin at 2013-11-10 22:10:00
统计矩形框的高度、宽度,简历标准矩形框模板。逐个移动对比,发现缺陷【这里要设定阈值】。

您好:谢谢您的解答!您提到接下来,需要统计矩形框的高度和宽度,这里我有几个疑问要请教一下您。第一:只需要统计其中一个矩形框的高度和宽度吗?第二:统计矩形框的高度和宽度,是否就是为了获取标准(也就是没有缺陷的条码)的参数,然后建立标准矩形框?第三:统计矩形框的高度和宽度,是否就是计算其在高度和宽度方向上的像素个数?谢谢!
5楼2013-11-11 09:05:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Allen2014

铜虫 (小有名气)

引用回帖:
6楼: Originally posted by feixiaolin at 2013-11-11 11:06:42
统计矩形框的高度和宽度就是计算其在高度和宽度方向上的像素个数?
缺陷1): 断线,像素点少了;2)不规则,偏离标准框距离过大【阈值需要自己设定】...

您好!首先谢谢您!在统计矩形框的高度和宽度时,我遇到了一些问题。第一:统计高度和宽度的原理通过您的讲解,我已经明白了,但是具体到编写代码时,首先使用什么函数,然后在利用什么函数,我还是有些迷茫,所以恳请您能给我提示一下。谢谢!(由于在学习数字图像处理时,只是围观的进行了一些学习,具体实践的数字图像处理,接触比较少,所以很难将课本中的知识点,灵活的运用到实际案例中,故希望能得到指教)
7楼2013-11-11 15:59:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Allen2014

铜虫 (小有名气)

引用回帖:
8楼: Originally posted by feixiaolin at 2013-11-11 16:48:06
统计矩形框的高度和宽度:用水平、竖直投影。...

谢谢您的建议!我按照您的思路,进行了水平和垂直投影,具体效果如下图所示。
首先,我说一下此次图像处理的一些调整。
第一:关于检测前几次利用Hough变换进行白色条码边缘检测时,hough函数的一些参数值没有选好,以至于检测出了很多干扰直线,此次我进行了参数值修改,尽量检测出目标边缘。
第二:在做旋转之前,需要计算旋转角度,要计算角度得首先检测出目标直线,但是无论我怎么修改hough相关函数,始终检测不到白色条码的长边直线(设定用青色标记检测到的最长直线,且以它的斜率进行角度计算),所以我就间接利用条码对面的圆弧(因为他很容易被当做最长直线检测出,且做相应标记)的斜率来间接计算条码要旋转至水平所需要的角度(圆弧与条码垂直,那么它们之间的角度相差90度);这样我就计算出了白色条码的旋转角度,然后对其进行旋转。
第三:旋转以后的图像中,白色条码的边缘,断断续续,只有一些大的边缘被保存,其他一些小的边缘被平滑掉了,所以为了后续投影,我接着分别进行了水平和垂直方向的腐蚀,以此使边缘完整连续,最后在细化边缘。
第四:分别对处理后的图像进行水平和垂直投影。

接下来的问题是:
第一:投影就是为了计算一个白色条码的长、宽,但是图中还有一些圆弧线也被计算到投影中,他们作为非条码边缘点,怎么处理?
第二:利用投影柱状图,接下来怎么计算一个白色条码的长、宽?
谢谢!
备注:针对以上,如有哪些地方有问题,恳请能够指教!谢谢
图像分割问题求助(已进行了一部分图像算法处理)-7
canny边缘检测图.jpg


图像分割问题求助(已进行了一部分图像算法处理)-8
Hough变换图.jpg


图像分割问题求助(已进行了一部分图像算法处理)-9
hough直线检测图.jpg


图像分割问题求助(已进行了一部分图像算法处理)-10
旋转细化后的图像.jpg


图像分割问题求助(已进行了一部分图像算法处理)-11
膨胀后的图像.jpg


图像分割问题求助(已进行了一部分图像算法处理)-12
旋转细化后的图像.jpg


图像分割问题求助(已进行了一部分图像算法处理)-13
垂直方向投影图.jpg


图像分割问题求助(已进行了一部分图像算法处理)-14
水平方向投影图.jpg

9楼2013-11-11 20:47:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Allen2014

铜虫 (小有名气)

引用回帖:
10楼: Originally posted by feixiaolin at 2013-11-11 20:58:37
水平方向投影图.jpg  做  FFT, 基频对应“旋转细化后的图像.jpg”条纹高度;
垂直方向投影图.jpg  取水平向阈值,可获得“旋转细化后的图像.jpg”宽度。

您好!按照您提示的进行FFT变换,我先学习了下FFT变换的意思,但是对于为何要在此处有FFT变化,以及其基频就代表条纹高度,很难理解,所以恳请您能解释一下,谢谢!
在进行FFT变换时,您提到对“水平方向投影图”,进行FFT变换。“水平方向投影图”是通过bar函数显示出来的,所以我不太理解,在接下来的FFT变换函数输出参数中,变换图像该写什么图片字母代号?
水平投影代码:
%------------------------------水平方向投影--------------------------------%
[M,N]=size(BW);      
% col(1,N)=0;
col2=zeros(1,M);
for j=1:N         
     for i=1:M
         if (img4(i,j)==1)
            col2(i)=col2(i)+img4(i,j);  
         end
     end
end
y=1:M;
figure;
bar(y,col2);
% plot(x,col);
xlabel('灰度值范围 '),ylabel('灰度值个数')  ;
title('水平方向投影');

傅里叶变换代码:
%-------------------------傅里叶变换---------------------------------------%
F1=fft2(bar);
F2=fftshift(F1);
figure,imshow(F2,'initialmagnification','fit');

运行以后,matlab命令窗口提示错误:
??? Error using ==> bar at 51
Not enough input arguments.
11楼2013-11-12 10:58:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Allen2014

铜虫 (小有名气)

引用回帖:
12楼: Originally posted by feixiaolin at 2013-11-12 12:52:08
常规定义FFT,输入信号是时间函数、基频与时间周期有关;
这里,输入信号是空间函数【像素宽度】、基频与与空间周期有关。空间周期就是小矩形的高度。...

谢谢您的解答!关于傅里叶变换这里,我还有有困难,具体如下(代码):
%-------------------------傅里叶变换---------------------------------------%
F1=fft2(bar);
F2=fftshift(F1);
figure,imshow(F2,'initialmagnification','fit');
首先,fft2('变换输入图像'),您提到要对“水平方向投影图”进行FFT变换,所以我理解就是在fft2函数的“变换输入图像”,这里应该写“bar(y,col2);”;但是bar函数只是一个显示函数,他不能生产一幅图像,所以我运行上述算法后,系统提示错误:??? Error using ==> bar at 51
Not enough input arguments.  所以我想请教一下您,这里的“变换输入图像”应该是哪个具体参数?谢谢!
13楼2013-11-12 14:20:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Allen2014

铜虫 (小有名气)

引用回帖:
14楼: Originally posted by feixiaolin at 2013-11-12 14:33:26
具体参数=(像素点排列位置,该【行】上255灰度值的像素点累加=bar的高度值...

谢谢您!对于FFT2函数,采用如下调用格式:F1=fft2(X,m,n);X表示要进行的傅里叶变换的图像,m,n分别表示变换矩阵F1的行数和列数。按照您的意见,我的调用格式如下F1=fft2(Img4,y,col2),运行了以后系统提示有问题,??? Input argument "ncols" is undefined.
       Error in ==> fft2 at 21
        f = fftn(x,[mrows ncols]);
img4我在进行水平和垂直投影之前,进行细化后生产的图像img4.
请教下您,我的fft2函数的三个参数X,m,n,哪个有问题?谢谢!
15楼2013-11-12 16:05:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Allen2014

铜虫 (小有名气)

引用回帖:
16楼: Originally posted by feixiaolin at 2013-11-12 16:21:32
实话说,我没有用过你那个matlab, 也没有matlab平台。
具体函数不懂。...

谢谢您!我自己在好好思考下,争取把这个难点攻克了,谢谢您!
17楼2013-11-12 16:48:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Allen2014

铜虫 (小有名气)

引用回帖:
16楼: Originally posted by feixiaolin at 2013-11-12 16:21:32
实话说,我没有用过你那个matlab, 也没有matlab平台。
具体函数不懂。...

您好!昨天到今天我认真的思考了您给予我的建议,关于对水平投影图进行FFT变换,求其基频的问题,我陈述一下我的个人理解,请您指教!
第一:通过对旋转后的图像进行水平方向投影,就可以得到这幅图像在每一行上面的像素点个数,最后得到的是一个一维的行向量,X坐标表示第几行,Y坐标表示这一行的点总个数,然后通过plot函数或者bar函数显示出来,就得到一个不规则(无规律)的曲线图,我们重点关注的是这个水平投影图(曲线图)中的曲线,而不是这个图片本身,不知道我的理解对吗?
第二:如果我们关注的是曲线,那么我们只要知道这个曲线的数学表达式,我们就可以对这个曲线进行FFT变换,这样就能得到这个曲线的基频,而这个基频就是我要最后需要计算得到的白色条码的高度,不知道我的理解对吗?
第三:现在的难点就是这个曲线的数学表达式怎么求出来,要不然就没有办法对其进行FFT变换,不知是否正确?
谢谢!
图像分割问题求助(已进行了一部分图像算法处理)-15
水平方向投影图(plot函数绘制).jpg

18楼2013-11-13 15:37:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 Allen2014 的主题更新
信息提示
请填处理意见