【发布时间】:2011-04-08 18:10:48
【问题描述】:
我有一张车牌图像,数字标有黑色方块。 我想要的是获取正方形的所有坐标,并用它从盘子上切下它们。
例如这是原始图像:
这是在标记数字之后:
任何帮助将不胜感激。
【问题讨论】:
-
@Mr E 我有两张图片。首先我用正方形标记了盘子中的每个数字,然后我想用正方形细节切割盘子上的数字。或者,如果你有一些方法可以从盘子上剪下数字而不先标记它们,那也很好。但我需要适合每个盘子的通用方式。
我有一张车牌图像,数字标有黑色方块。 我想要的是获取正方形的所有坐标,并用它从盘子上切下它们。
例如这是原始图像:
这是在标记数字之后:
任何帮助将不胜感激。
【问题讨论】:
这是在 Matlab 中执行此操作的一种方法
%# read the first image
img = imread('http://i.stack.imgur.com/s9A4m.jpg');
%# convert it to a binary image
img = rgb2gray(img);
img = img > 200;
%# remove the connecting lines
img = imclose(img,strel('disk',5));
%# use bwlabel to replace the black squares with a index (1,2,3...)
lblImg = bwlabel(~img);
%# read the second image, make it binary
img2 = imread('http://i.stack.imgur.com/PtKzw.jpg');
img2 = img2 > 200;
%# create the output - each number is now labeled with an index
out = double(~img2).*lblImg;
%# visualize all
figure,imshow(label2rgb(out,'jet','k','shuffle'))
%# extract and show label #1
firstNumber = out==1;
imshow(firstNumber);
【讨论】:
imshow(~firstNumber)。要确定您是否有数字,您应该查看 OCR 方法。
[r,c]=find(firstNumber);croppedNumber = firstNumber(min(r):max(r),min(c):max(c:));`
我不使用 Matlab,但我可以向您展示如何在 Mathematica 中进行操作。希望你能翻译!
【讨论】:
看看图像处理工具箱。
函数 bwdist、imregionalmin 和 bwselect 应该能够为您获取正方形坐标。
【讨论】:
在匆忙中草拟答案。正方形中有一些白点,连接正方形有一些黑色条纹。查找形态学操作如:
http://www.mathworks.com/help/toolbox/images/ref/imclose.html
用一个小的结构元素(3x3 正方形或类似的)关闭图像,以消除正方形中的噪点。
用更大的结构元素(10x10 正方形或更大)打开图像,去掉连接的条纹位。
然后使用像 bwlabel 这样的函数来分割/标记剩余的像素。这有点不精确,因为正方形会失去一些边缘的结构。
【讨论】: