【问题标题】:LED Screen recognition in image using MATLAB使用 MATLAB 在图像中识别 LED 屏幕
【发布时间】:2014-01-21 11:52:02
【问题描述】:

我正在尝试从图像中检测屏幕边框(需要 4 个角)。 这是图片:

我使用 HOUGH 变换来检测线和交点(黑色圆圈),结果如下:

现在我需要找到 4 个角或 4 条线。所有可以帮助我裁剪图像的东西,我该怎么办? 也许使用屏幕纵横比?但如何? 我正在使用 Matlab。

谢谢。

【问题讨论】:

  • 背景会一直这样吗?我的意思是,它会是统一的颜色吗?另外,笔记本电脑的颜色总是一样的吗?
  • 是的,同样的背景,同样的笔记本,图片会不一样。

标签: matlab image-processing image-recognition


【解决方案1】:

当且仅当您具有相同的图像条件(背景和笔记本电脑)时,一种天真的第一种方法才能奏效。

  1. 将图像转换为 HSV(检查 HSV 中的图像 屏幕是图像中唯一具有高饱和度、值的部分 值)
  2. 通过对饱和度和值通道进行硬阈值化来创建蒙版
  3. 扩张蒙版以连接断开的区域
  4. 计算凸包以获得掩码边界

查看快速结果: 这是与原始图像部分相同的蒙版,可以通过蒙版:

这是执行此操作的代码:

img = imread( 'imagename.jpg'); % change the image name
hsv = rgb2hsv( img);
mask = hsv(:,:,2)>0.25 & hsv(:,:,3)>0.5;
strel_size = round(0.025*max(size(mask)));
dilated_mask=imdilate(mask,strel('square',strel_size));
s=regionprops(dilated_mask,'BoundingBox','ConvexHull');
% here Bounding box produces a box with the minimum-maximum white pixel positions but the image is not actually rectangular due to perspective...
imshow(uint8(img.*repmat(dilated_mask,[1 1 3])));
line(s.ConvexHull(:,1),s.ConvexHull(:,2),'Color','red','LineWidth',3);


当然,您可以应用一些更复杂的处理来更准确,并将凸包校正为具有透视的矩形形状,但这只是展示该方法的 5 分钟尝试......

【讨论】:

    猜你喜欢
    • 2017-07-17
    • 1970-01-01
    • 2018-03-27
    • 2017-02-07
    • 2013-02-16
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多