国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

霍夫變換直線檢測(cè)原理和應(yīng)用

這篇具有很好參考價(jià)值的文章主要介紹了霍夫變換直線檢測(cè)原理和應(yīng)用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1. 引言

今天我們將重點(diǎn)討論霍夫變換,這是一種非常經(jīng)典的線檢測(cè)的算法,通過(guò)將圖像中的點(diǎn)映射到參數(shù)空間中的線來(lái)實(shí)現(xiàn)。霍夫變換可以檢測(cè)任何方向的線,并且可以在具有大量噪聲的圖像中很好地工作。
閑話少說(shuō),我們直接開(kāi)始吧!

2. 基礎(chǔ)知識(shí)

為了理解霍夫變換的工作原理,首先我們需要了解直線是如何在極坐標(biāo)系中定義的。直線由ρ(距原點(diǎn)的垂直距離)和θ(垂直線與軸線的夾角)來(lái)描述,如下圖所:
霍夫變換檢測(cè)直線的應(yīng)用,圖像處理,Python,計(jì)算機(jī)視覺(jué),opencv,人工智能
因此,該直線的方程式為:
霍夫變換檢測(cè)直線的應(yīng)用,圖像處理,Python,計(jì)算機(jī)視覺(jué),opencv,人工智能
我們可以將其轉(zhuǎn)化下表述形式,得到如下公式:
霍夫變換檢測(cè)直線的應(yīng)用,圖像處理,Python,計(jì)算機(jī)視覺(jué),opencv,人工智能
從上面的方程中,我們可以看出,所有具有相同ρ和θ值的點(diǎn)構(gòu)成一條直線。我們算法的基礎(chǔ)是針對(duì)θ的所有可能值計(jì)算圖像中每個(gè)點(diǎn)的ρ值。

3. 算法原理

霍夫變換的處理步驟如下:
1)首先我們創(chuàng)建一個(gè)參數(shù)空間(又叫做霍夫空間)。參數(shù)空間是ρ和θ的二維矩陣,其中θ的范圍在0–180之間。
2)使用諸如Canny邊緣之類的邊緣檢測(cè)算法檢測(cè)圖像的邊緣之后運(yùn)行該算法。值為255的像素被認(rèn)為是邊緣。
3)接著我們逐像素掃描圖像以找到這些邊緣像素,并通過(guò)使用從0到180的θ值來(lái)計(jì)算每個(gè)像素的ρ。對(duì)于同一直線上的像素,θ和rho的值將是相同的。我們?cè)诨舴蚩臻g中以1的權(quán)重對(duì)其投票。
4)最后,投票超過(guò)一定閾值的ρ和θ的值被視為直線。

代碼處理過(guò)程如下:

def hough(img):
    # Create a parameter space
    # Here we use a dictionary
    H=dict()
    # We check for pixels in image which have value more than 0(not black)
    co=np.where(img>0)
    co=np.array(co).T
    for point in co:
        for t in range(180):
            # Compute rho for theta 0-180
            d=point[0]*np.sin(np.deg2rad(t))+point[1]*np.cos(np.deg2rad(t))
            d=int(d)
            # Compare with the extreme cases for image
            if d<int(np.ceil(np.sqrt(np.square(img.shape[0]) + np.square(img.shape[1])))):
                if (d,t) in H:
                    # Upvote
                    H[(d,t)] += 1
                else:
					# Create a new vote
                    H[(d,t)] = 1
    return H

4. 算法應(yīng)用

在本文中,我們將檢測(cè)圖像中對(duì)象(書(shū)籍)的角點(diǎn)。這似乎是一項(xiàng)簡(jiǎn)單的任務(wù),然而,它將讓我們深入了解使用霍夫變換檢測(cè)直線的過(guò)程。

4.1 彩色圖到HSV空間

由于直接RGB圖像做這項(xiàng)任務(wù)略有難度,我們不妨將該圖像轉(zhuǎn)換為HSV顏色空間,以便在HSV范圍內(nèi)輕松獲取我們的目標(biāo)。
核心代碼如下:

img = cv2.imread("book.jpeg")
scale_percent = 30 # percent of original size
width = int(img.shape[1] * scale_percent / 100)
height = int(img.shape[0] * scale_percent / 100)
dim = (width, height)
# resize image
img = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

得到結(jié)果如下所示:
霍夫變換檢測(cè)直線的應(yīng)用,圖像處理,Python,計(jì)算機(jī)視覺(jué),opencv,人工智能

4.2 高斯模糊

我們應(yīng)用高斯模糊來(lái)平滑圖像中由于噪聲而產(chǎn)生的粗糙邊緣,進(jìn)而可以突出我們圖像中的目標(biāo),代碼如下:

# Apply gaussian blur to he mask
blur = cv2.GaussianBlur(hsv, (9, 9), 3)

結(jié)果如下所示:
霍夫變換檢測(cè)直線的應(yīng)用,圖像處理,Python,計(jì)算機(jī)視覺(jué),opencv,人工智能

4.3 二值化和腐蝕操作

接著我們使用inRange函數(shù)來(lái)得到二值化圖像。這使我們能夠擺脫圖像中其他周圍的物體。代碼如下:

# Define the color range for the ball (in HSV format)
lower_color = np.array([0, 0, 24],np.uint8)
upper_color = np.array([179, 255, 73],np.uint8)
# Define the kernel size for the morphological operations
kernel_size = 7
# Create a mask for the ball color using cv2.inRange()
mask = cv2.inRange(blur, lower_color, upper_color)

得到結(jié)果如下:
霍夫變換檢測(cè)直線的應(yīng)用,圖像處理,Python,計(jì)算機(jī)視覺(jué),opencv,人工智能
我們觀察上圖,存在或多或少的縫隙,我們不妨使用腐蝕操作來(lái)填補(bǔ)這些縫隙。代碼如下:

# Apply morphological operations to the mask to fill in gaps
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (kernel_size, kernel_size))
mask = cv2.dilate(mask, kernel,iterations=1)

結(jié)果如下:
霍夫變換檢測(cè)直線的應(yīng)用,圖像處理,Python,計(jì)算機(jī)視覺(jué),opencv,人工智能

4.4 邊緣檢測(cè)

邊緣檢測(cè)canny主要用于檢測(cè)邊緣。這主要是因?yàn)槟繕?biāo)和周圍背景之間的高對(duì)比度。代碼如下:

#  Use canny edges to get the edges of the image mask
edges = cv2.Canny(mask,200, 240, apertureSize=3)

結(jié)果如下圖所示:
霍夫變換檢測(cè)直線的應(yīng)用,圖像處理,Python,計(jì)算機(jī)視覺(jué),opencv,人工智能

4.5 霍夫變換

當(dāng)我們進(jìn)行canny邊緣檢測(cè)時(shí),我們得到了很多邊緣。因此,當(dāng)我們運(yùn)行霍夫算法時(shí),這些邊為同一條邊貢獻(xiàn)了許多條候選線。為了解決這個(gè)問(wèn)題,我們對(duì)霍夫空間中ρ和θ的相鄰值進(jìn)行聚類,并對(duì)它們的值進(jìn)行平均,得到它們的上投票數(shù)之和。這導(dǎo)致了描繪相同邊緣的線條的合并,代碼如下:

# Get the hough space, sort and select to 20 values
hough_space = dict(sorted(hough(edges).items(), key=lambda item: item[1],reverse=True)[:20])
# Sort the hough space w.r.t rho and theta
sorted_hough_space_unfiltered = dict(sorted(hough_space.items()))
# Get the unique rhoand theta values
unique_=unique(sorted_hough_space_unfiltered)
# Sort according to value and get the top 4 lines
unique_=dict(sorted(unique_.items(), key=lambda item: item[1],reverse=True)[:4])

得到結(jié)果如下:
霍夫變換檢測(cè)直線的應(yīng)用,圖像處理,Python,計(jì)算機(jī)視覺(jué),opencv,人工智能

4.6 計(jì)算角點(diǎn)

根據(jù)在霍夫空間中獲得的直線,我們可以使用線性代數(shù)對(duì)其進(jìn)行角點(diǎn)求解。這可以求出我們兩條直線的交叉點(diǎn),也就是書(shū)的角點(diǎn),代碼如下:

# Create combinations of lines
line_combinations = list(combinations(unique_.items(), 2))

intersection=[]
filter_int=[]
for (key1, value1), (key2, value2) in line_combinations:
    try:
	# Solve point of intersection of two lines
        intersection.append(intersection_point(key1[0],np.deg2rad(key1[1]), key2[0],np.deg2rad(key2[1]))) 
    except:
        print("Singular Matrix")

for x,y in intersection:
    if x>0 and y>0:
		# Get the valid cartesan co ordinates
        cv2.circle(img, (x, y), 5, (0, 0, 0), -1)
        cv2.putText(img, '{},{}'.format(x,y), (x-10, y), cv2.FONT_HERSHEY_SIMPLEX, 0.4, (255, 255, 255), 1)
        filter_int.append([x,y])

最終輸出如下圖所示:
霍夫變換檢測(cè)直線的應(yīng)用,圖像處理,Python,計(jì)算機(jī)視覺(jué),opencv,人工智能

5. 總結(jié)

盡管該算法現(xiàn)已集成在各種各樣的圖像處理庫(kù),但本文通過(guò)自己實(shí)現(xiàn)它,我們可以深入了解在創(chuàng)建如此復(fù)雜的算法時(shí)所面臨的挑戰(zhàn)和局限性。

嗯嗯,您學(xué)廢了嘛?

代碼鏈接:戳我文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-740211.html

到了這里,關(guān)于霍夫變換直線檢測(cè)原理和應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python-OpenCV中的圖像處理-霍夫變換

    Python-OpenCV中的圖像處理-霍夫變換

    霍夫(Hough)變換在檢測(cè)各種形狀的技術(shù)中非常流行,如果要檢測(cè)的形狀可以用數(shù)學(xué)表達(dá)式描述,就可以是使用霍夫變換檢測(cè)它。即使要檢測(cè)的形狀存在一點(diǎn)破壞或者扭曲也是可以使用。 Hough直線變換,可以檢測(cè)一張圖像中的直線 cv2.HoughLines(image, rho, theta, threshold) return:返回值

    2024年02月13日
    瀏覽(124)
  • OpenCV-Python中的圖像處理-霍夫變換

    OpenCV-Python中的圖像處理-霍夫變換

    霍夫(Hough)變換在檢測(cè)各種形狀的技術(shù)中非常流行,如果要檢測(cè)的形狀可以用數(shù)學(xué)表達(dá)式描述,就可以是使用霍夫變換檢測(cè)它。即使要檢測(cè)的形狀存在一點(diǎn)破壞或者扭曲也是可以使用。 Hough直線變換,可以檢測(cè)一張圖像中的直線 cv2.HoughLines(image, rho, theta, threshold) return:返回值

    2024年02月12日
    瀏覽(30)
  • OpenCV中的圖像處理 —— 霍夫線 / 圈變換 + 圖像分割(分水嶺算法) + 交互式前景提?。℅rabCut算法)

    OpenCV中的圖像處理 —— 霍夫線 / 圈變換 + 圖像分割(分水嶺算法) + 交互式前景提取(GrabCut算法)

    ??上一節(jié)我們介紹了OpenCV中傅里葉變換和模板匹配,這一部分我們來(lái)聊一聊霍夫線/圈變換的原理和應(yīng)用、使用分水嶺算法實(shí)現(xiàn)圖像分割和使用GrabCut算法實(shí)現(xiàn)交互式前景提取 ??哈嘍大家好,這里是ErrorError!,一枚某高校大二本科在讀的♂同學(xué),希望未來(lái)在機(jī)器視覺(jué)領(lǐng)域能夠有

    2023年04月08日
    瀏覽(30)
  • 霍夫變換車道線識(shí)別-車牌字符識(shí)別代碼(matlab仿真與圖像處理系列第5期)

    霍夫變換車道線識(shí)別-車牌字符識(shí)別代碼(matlab仿真與圖像處理系列第5期)

    當(dāng)使用霍夫變換進(jìn)行車道線識(shí)別時(shí),可以按照以下步驟來(lái)編寫(xiě) MATLAB 代碼: 讀入圖像:使用 imread 函數(shù)讀取包含車道線的圖像。 圖像預(yù)處理:為了減少噪音和突出車道線,可以對(duì)圖像進(jìn)行預(yù)處理。通常,可以采用以下步驟: 將圖像轉(zhuǎn)換為灰度圖像:使用 rgb2gray 函數(shù)將彩色圖

    2024年02月11日
    瀏覽(43)
  • 【OpenCV-Python】——邊緣和輪廓&Laplacian/Sobel/Canny邊緣檢測(cè)&查找/繪制輪廓及輪廓特征&霍夫直線/圓變換

    【OpenCV-Python】——邊緣和輪廓&Laplacian/Sobel/Canny邊緣檢測(cè)&查找/繪制輪廓及輪廓特征&霍夫直線/圓變換

    目錄 前言: 1、邊緣檢測(cè) 1.1 Laplacian邊緣檢測(cè) ?1.2 Sobel邊緣檢測(cè) ?1.3 Canny邊緣檢測(cè) 2、圖像輪廓 2.1 查找輪廓 ?2.2 繪制輪廓 2.3 輪廓特征 3、霍夫變換 3.1 霍夫直線變換 ?3.2 霍夫圓變換 總結(jié): 圖像的邊緣是指圖像中灰度值急劇變化的位置,邊緣檢測(cè)的目的是為了繪制邊緣線條。

    2024年01月23日
    瀏覽(22)
  • OpenCV26HoughCircles 霍夫圓變換原理及圓檢測(cè)

    OpenCV26HoughCircles 霍夫圓變換原理及圓檢測(cè)

    霍夫圓變換的基本原理與霍夫線變換大體類似 對(duì)直線來(lái)說(shuō),一條直線能由極徑極角(r,θ)表示,而對(duì)于圓來(lái)說(shuō),我們需要三個(gè)參數(shù):圓心(a,b),半徑 r 笛卡爾坐標(biāo)系中圓的方程為: (x-a)2 + (y-b)2 = r2 化簡(jiǎn)便可得到: a = x - r·cosθ b = y - r·sinθ 對(duì)于(x0,y0),我們可以將通

    2024年02月03日
    瀏覽(21)
  • Hough變換原理-直線檢測(cè)

    Hough變換原理-直線檢測(cè)

    目錄 ? 一、簡(jiǎn)介 二、原理 三、Python代碼實(shí)現(xiàn) ? ????????Hough(霍夫)變換是圖像處理中從圖像中識(shí)別幾何形狀的基本方法之一。 Hough變換是將圖像坐標(biāo)空間變換到參數(shù)空間 ,利用點(diǎn)與線的對(duì)偶性,將原始圖像空間的給定的曲線(今天主要介紹直線)通過(guò)曲線表達(dá)形式變

    2024年02月04日
    瀏覽(16)
  • 13- OpenCV:霍夫檢測(cè):直線、圓檢測(cè)

    13- OpenCV:霍夫檢測(cè):直線、圓檢測(cè)

    目錄 一、霍夫變換簡(jiǎn)介 1、霍夫變換的原理 2、霍夫變換的優(yōu)點(diǎn) 3、霍夫變換的缺點(diǎn) 4、霍夫變換的應(yīng)用場(chǎng)景 5、使用霍夫變換的步驟 二、霍夫變換—直線檢測(cè) 1、霍夫直線變換介紹 2、霍夫直線變換的例子 3、相關(guān)API學(xué)習(xí)(代碼例子) 三、霍夫變換—圓檢測(cè) 1、霍夫圓檢測(cè)原理

    2024年02月21日
    瀏覽(24)
  • 【OpenCV】cv2.HoughLines()霍夫直線檢測(cè)

    【OpenCV】cv2.HoughLines()霍夫直線檢測(cè)

    霍夫直線檢測(cè)(Hough Line Transform)是一種在圖像中檢測(cè)直線的經(jīng)典算法。它通過(guò)將二維圖像空間中的點(diǎn)映射到極坐標(biāo)空間中,將直線檢測(cè)問(wèn)題轉(zhuǎn)化為在參數(shù)空間中找到交點(diǎn)的問(wèn)題。 原理: 對(duì)于圖像空間中的每個(gè)邊緣點(diǎn),計(jì)算其對(duì)應(yīng)在極坐標(biāo)空間中可能的直線。 極坐標(biāo)空間中

    2024年02月05日
    瀏覽(94)
  • 【課程介紹】OpenCV 基礎(chǔ)入門(mén)教程:圖像讀取、顯示、保存,圖像處理和增強(qiáng)(如濾波、邊緣檢測(cè)、圖像變換),特征提取和匹配,目標(biāo)檢測(cè)和跟蹤

    [ 專欄推薦 ] ?? 《視覺(jué)探索: OpenCV 基礎(chǔ)入門(mén)教程》 ?? ??【簡(jiǎn)介】: Opencv 入門(mén)課程適合初學(xué)者,旨在介紹 Opencv 庫(kù)的基礎(chǔ)知識(shí)和核心功能。課程包括圖像讀取、顯示、保存,圖像處理和增強(qiáng)(如濾波、邊緣檢測(cè)、圖像變換),特征提取和匹配,目標(biāo)檢測(cè)和跟蹤等內(nèi)容。學(xué)

    2024年02月16日
    瀏覽(2470)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包