Perfom水平排名过滤matlab

时间:2016-09-20 06:13:58

标签: matlab image-processing extraction edge

我做了一些识别平台号码,然后在解压缩时我卡住了,我读了参考,我必须进行水平排名过滤,但我不知道该怎么办。代码:

a = imread('Izy.jpg');
b = imresize(a,0.5);
c = rgb2gray(b);
Py = [ -1,0,1; -1,0,1 ; -1,0,1];        
Gp = conv2(c,Py);
Gpx = edge(Gp,'prewitt');
cl = bwareaopen(Gpx,10);
imshow(cl)

Izy.jpg output image and i want get the red rectangled that i mark then crop it

由于

1 个答案:

答案 0 :(得分:0)

我只是尝试了一个代码来处理这个特定的图像,但不是一般的。这里我们有输入图像。

Original Image

a = imread('Izy.jpg');
b = imresize(a,0.5);
c = rgb2gray(b);

此处的代码将图像读入变量a,将其缩小到一半大小(存储在b中),然后将其从3通道图像转换为灰度图像(存储在{{ 1}})。我建议使用Canny边缘检测器而不是Prewitt检测器,如下所示:

c

Edge Detected Image

  • 检测到边缘的二进制图像(存储在Gpx = edge(c,'canny'); L = bwlabel(Gpx,8); 中)将具有多个前景图像或区域。区域是像素的集合,其中每个成员像素连接到其中的至少一个相邻像素中的至少一个。这些区域使用Gpx标记并存储在bwlabel()
  • 使用L,我们得到一个结构,其中包含图像中存在的区域的不同属性。

此处,计算区域的regionprops('properties','properties',..)area属性。 eccentricity值有助于我们识别区域是圆形还是线形。对于圆,值为eccentricity,对于一行,值为0

1

由于图像中有129个(imgstat = regionprops(L,'Area','Eccentricity'); area = [imgstat.Area]; ecc = [imgstat.Eccentricity]; )个区域,因此每个区域都会有一些区域和偏心值。使用反复试验来确定size(imgstat)area属性所需的值。

应用近似属性值以获取车牌的边界,并将区域索引存储在eccentricity中。 label从标记的图像中提取并存储所需的区域。

logical_result

存储在label = find((area > 150) & (ecc < 0.95) & (ecc > 0.9)); logical_result = ismember(L,label); figure;imshow(logical_result)

中的图像

Extracted regions

现在,计算logical_result的边界值。这些值作为索引恢复,因此,我们必须使用logical_result将它们转换为下标。从边界值我们可以从原始图像中提取感兴趣的区域

ind2sub()

这给出了以下结果:

Output Obtained