首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LPR与MATLAB:如何只找到一个矩形?

LPR与MATLAB:如何只找到一个矩形?
EN

Stack Overflow用户
提问于 2013-12-25 22:47:30
回答 1查看 2.4K关注 0票数 0

我正在使用MATLAB中的以下代码来查找包含汽车牌照的矩形:

代码语言:javascript
运行
复制
    clc
clear
close all

%Open Image
I = imread('plate_1.jpg');
figure, imshow(I);

%Gray Image
Ib = rgb2gray(I);
figure,
subplot(1,2,1), imshow(Ib);

%Enhancement
Ih = histeq(Ib);
subplot(1,2,2), imshow(Ih);

figure,
subplot(1,2,1), imhist(Ib);
subplot(1,2,2), imhist(Ih);

%Edge Detection
Ie = edge(Ih, 'sobel');
figure, 
subplot(1,2,1), imshow(Ie);

%Dilation
Id = imdilate(Ie, strel('diamond', 1));
subplot(1,2,2), imshow(Id);


%Fill
If = imfill(Id, 'holes');
figure, imshow(If);

%Find Plate
[lab, n] = bwlabel(If);

regions = regionprops(lab, 'All');
regionsCount = size(regions, 1) ;

for i = 1:regionsCount
    region = regions(i);
    RectangleOfChoice = region.BoundingBox;
    PlateExtent = region.Extent;

    PlateStartX = fix(RectangleOfChoice(1));
    PlateStartY = fix(RectangleOfChoice(2));
    PlateWidth  = fix(RectangleOfChoice(3));
    PlateHeight = fix(RectangleOfChoice(4));

    if PlateWidth >= PlateHeight*3 && PlateExtent >= 0.7
        im2 = imcrop(I, RectangleOfChoice);
        figure, imshow(im2);
    end
end

盘子都有白色的背景。目前,我使用矩形的宽度与高度的比率来选择输出的候选区域。在白色汽车的情况下,除了其他几个不相关的矩形外,这还会给出板矩形。我能用什么方法只得到一个输出:车牌?而且,当我在一辆黑色汽车上运行代码时,我根本找不到车牌。也许是因为车的颜色和车牌边缘是一样的。有什么替代边缘检测的方法来避免这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-06 14:20:13

试试这个!

代码语言:javascript
运行
复制
I = imread('http://8pic.ir/images/88146564605446812704.jpg');
im=rgb2gray(I);
sigma=1;
f=zeros(128,128);
f(32:96,32:96)=255;
[g3, t3]=edge(im, 'canny', [0.04 0.10], sigma);
se=strel('rectangle', [1 1]);
BWimage=imerode(g3,se);
gg = imclearborder(BWimage,8);
bw = bwareaopen(gg,200);
gg1 = imclearborder(bw,26);
imshow(gg1);

%Dilation
Id = imdilate(gg1, strel('diamond', 1));
imshow(Id);

%Fill
If = imfill(Id, 'holes');
imshow(If);

%Find Plate
[lab, n] = bwlabel(If);

regions = regionprops(lab, 'All');
regionsCount = size(regions, 1) ;

for i = 1:regionsCount
    region = regions(i);
    RectangleOfChoice = region.BoundingBox;
    PlateExtent = region.Extent;

    PlateStartX = fix(RectangleOfChoice(1));
    PlateStartY = fix(RectangleOfChoice(2));
    PlateWidth  = fix(RectangleOfChoice(3));
    PlateHeight = fix(RectangleOfChoice(4));

   if PlateWidth >= PlateHeight*1 && PlateExtent >= 0.7
        im2 = imcrop(I, RectangleOfChoice);
        %figure, imshow(I);
        figure, imshow(im2);
    end
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20777384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档