簡體   English   中英

平面圖邊緣檢測 - 圖像處理?

[英]Floor Plan Edge Detection - Image Processing?

我是一個完全不同的學科的人,需要一些圖像處理技術來實現項目中的這個目標。 我需要從室內平面圖中得出邊緣,如下所示

在此輸入圖像描述

我試過這個特殊的Python邊緣檢測片段:

from PIL import Image, ImageFilter

image = Image.open('L12-ST.jpg')
image = image.filter(ImageFilter.FIND_EDGES)
image.save('new_name.png') 

然而,它返回的細節遠遠超過我的需要。 它基本上檢測所有邊緣,包括房間牆壁。 實際上,我需要的只是走廊的牆壁。 所以我期待這樣的事情

在此輸入圖像描述

我怎么能這樣做? 我正在使用Python,但非常感謝任何通用或一般指針甚至一些關鍵字。

這是一個例子。 你需要有opencv包才能運行它。

那里有一個休息因為圖像有文物。 如果你使用更高質量的圖像,它可能會更好。 如果你不能擁有更高質量的圖像,可能會采用形態學操作來連接小間隙並去除四分之一圓形突起。

在此輸入圖像描述

import cv2
import numpy as np

img = cv2.imread('c:/data/floor.jpg')
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray=255-gray

contours,hierarchy = cv2.findContours(gray,cv2.RETR_LIST ,cv2.CHAIN_APPROX_NONE )

for cnt in contours:
    area = cv2.contourArea(cnt)
    if area>9000 and area<40000:
        cv2.drawContours(img,[cnt],0,(255,0,0),2)

cv2.imshow('img',img)
cv2.waitKey()

編輯

做了一些預處理來修復休息

import cv2
import numpy as np

img = cv2.imread('c:/data/floor.jpg')

img=cv2.resize(img,(1700,700))
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray=255-gray
gray=cv2.threshold(gray,4,255,cv2.THRESH_BINARY)[1]
gray=cv2.blur(gray,(15,1))
contours,hierarchy = cv2.findContours(gray,cv2.RETR_LIST ,cv2.CHAIN_APPROX_NONE )

for cnt in contours:
    area = cv2.contourArea(cnt)
    if area>150000 and area<500000:
        cv2.drawContours(img,[cnt],0,(255,0,0),2)

cv2.imshow('img',img)
cv2.waitKey()

在此輸入圖像描述

我猜你在使用邊緣探測器之前需要進行一些預處理,因為房間牆壁和走廊之間沒有特別的區別。 一個想法是在cad文件中選擇不同的顏色,然后幫助您的探測器區分您正在尋找的東西。 第二個是提前限制您的處理區域。 否則,我不會有一個你可以應用的直接技術並提取走廊。 希望它有所幫助。

我同意@Eb Abadi關於改變CAD模型顏色的說法(如果可能的話)。 否則,使用一些面具(與房間大小完全相同)來基本上模糊房間的所有邊緣細節,您將只留下大廳和外牆。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM