欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于圖像處理的多線程計(jì)算介紹

Dbwd_Imgtec ? 來源:未知 ? 作者:李倩 ? 2018-04-03 11:41 ? 次閱讀

圖像處理的算法復(fù)雜度通常都比較高,計(jì)算也相應(yīng)比較耗時(shí)。利用CPU多線程處理能力可以大幅度加快計(jì)算速度。但是,為了保證多線程處理的結(jié)果和單線程處理的結(jié)果完全相同,圖像的多線程計(jì)算有一些需要特別考慮的地方。

基本思路:

為了能讓多個(gè)線程同時(shí)并行處理,那么各自處理的數(shù)據(jù)不能有交集,這很好理解。那么基本思路是將一副圖像分成多個(gè)子塊,每個(gè)子塊數(shù)據(jù)肯定是沒有交集的,每個(gè)線程對(duì)一個(gè)子塊數(shù)據(jù)進(jìn)行處理,完成后將所有子塊處理結(jié)果合成最終圖像。

首先,每個(gè)子塊的大小當(dāng)然是必須考慮的問題。通常當(dāng)應(yīng)用進(jìn)行一個(gè)較長(zhǎng)時(shí)間的操作,應(yīng)該用合適的方式告知用戶。既然我們把圖像分子塊處理,如果單個(gè)子塊處理時(shí)間很短,那么每當(dāng)有一個(gè)子塊的數(shù)據(jù)處理完成,我們就可以立即把它相應(yīng)的處理結(jié)果展示給用戶。用戶就會(huì)看到這個(gè)圖像各個(gè)部分的處理結(jié)果不斷展示出來,直至整個(gè)圖像完成。這樣某種程度上用這種方式就是在告知用戶正在處理進(jìn)行中,避免為了把整個(gè)圖像處理完成,用戶需要等待太長(zhǎng)時(shí)間。從這個(gè)角度來說,如果子塊尺寸取的太大,每個(gè)子塊計(jì)算時(shí)間肯定相應(yīng)地加長(zhǎng),對(duì)于快速顯示部分處理結(jié)果給用戶是不利的。但是如果子塊太小,子塊總數(shù)就會(huì)增加,肯定會(huì)增加線程開銷和其他一些開銷(分割圖像,分配子塊數(shù)據(jù)等等),對(duì)于總的計(jì)算時(shí)間是不利的。這是一個(gè)權(quán)衡問題,可以根據(jù)具體情況確定。

另外,很多圖像處理都要考慮像素領(lǐng)域范圍的信息,因此對(duì)于每個(gè)子塊的處理不能僅僅使用這個(gè)子塊的內(nèi)容。具體地,對(duì)于靠近子塊邊緣的像素,還要把子塊外的部分像素信息考慮進(jìn)來,加入計(jì)算,才能保證相應(yīng)像素的處理結(jié)果是正確的。準(zhǔn)確來說,如果領(lǐng)域半徑為r(對(duì)方形或圓形領(lǐng)域來說,其他領(lǐng)域可做相應(yīng)調(diào)整),那么子塊處理所需要的所有數(shù)據(jù)是子塊四周向外擴(kuò)展r像素的范圍。

代碼中extend就是子塊要向四周擴(kuò)張的大小,其實(shí)就是領(lǐng)域半徑r。pRect[i]是分割的第i個(gè)子塊的大小。Height和Width是原圖的高寬,擴(kuò)展子塊自然不能超過原圖的尺寸。那么最后rect1就是計(jì)算所需要的數(shù)據(jù)在原圖中所在的領(lǐng)域范圍,應(yīng)用原圖的尺寸對(duì)它進(jìn)行了限制。由于我是把每個(gè)子塊當(dāng)成一個(gè)新的圖像進(jìn)行處理,rect2就是新圖像中子塊處理結(jié)果所在的位置,用它來合成最終圖像。

最后關(guān)于線程具體創(chuàng)建銷毀,資源分配與回收,線程同步和通信,不做具體討論。只討論一下在這里多線程如何協(xié)調(diào)工作的問題。由于計(jì)算子塊的線程只負(fù)責(zé)處理子塊,還需要有人來做分割子塊,分配數(shù)據(jù)給子塊計(jì)算線程等等工作。本來應(yīng)該畫流程圖的,實(shí)在懶得畫了,這里簡(jiǎn)單描述一下幾個(gè)線程如何協(xié)調(diào)工作的,其實(shí)也很簡(jiǎn)單。界面線程A,處理和用戶之間的交互,接受用戶命令,發(fā)送計(jì)算消息給線程B。計(jì)算協(xié)調(diào)線程B接受A的消息,分割子塊,分配子塊數(shù)據(jù),創(chuàng)建子塊計(jì)算線程Ci。子塊計(jì)算線程Ci負(fù)責(zé)子塊計(jì)算,發(fā)送處理結(jié)果(成功或失?。┫⒔o線程B或者A。界面線程A收到子塊完成消息,可以立即顯示子塊處理結(jié)果,當(dāng)然也可以什么都不做,等到所有子塊處理完再顯示。協(xié)調(diào)線程B收到第i個(gè)子塊完成消息,回收分配給線程Ci的資源,銷毀Ci。如果所有的Ci完成了工作,B發(fā)送圖像處理完成的消息給A,A可以接著做后續(xù)的工作。這里單獨(dú)用了一個(gè)線程B來做子塊計(jì)算協(xié)調(diào)的工作,感覺這樣比較清晰一些。當(dāng)然也可以讓界面線程A來做這個(gè)工作,協(xié)調(diào)的工作量也不是很大,這樣就可以不需要B線程。

單線程和多線程處理時(shí)間對(duì)比

多線程處理速度肯定不能簡(jiǎn)單地是單線程處理速度的N倍,這只是理想狀況。由于很多額外工作(線程開銷,準(zhǔn)備每個(gè)線程的數(shù)據(jù),處理結(jié)果的合成,線程間同步,圖像子塊結(jié)合部的部分重復(fù)計(jì)算),多線程是不可能達(dá)到理想狀況的。下表列出了一副2400x1350大小的24bit圖像分成了12個(gè)子塊,分別在一臺(tái)I5 4300U(雙核四線程)筆記本上和一臺(tái)I5 6500(四核四線程)臺(tái)式機(jī)上,處理高斯模糊的大概的平均耗時(shí)。高斯模糊算法是簡(jiǎn)單的行列方向兩次一維計(jì)算,半徑取50。在我的測(cè)試中,還實(shí)時(shí)顯示了分塊的處理結(jié)果,速度上可能要更慢一點(diǎn)。

理想狀況下四線程耗時(shí)最多能減少75%,實(shí)際上肯定達(dá)不到。在雙核四線程平臺(tái)上,對(duì)亮度通道處理,多線程比單線程耗時(shí)減少了一半(50%)。對(duì)RGB通道,多線程比單線程耗時(shí)減少了大概59%。在四核四線程平臺(tái)上,多線程耗時(shí)在亮度通道和RGB通道處理時(shí),分別減少了64%和69%??梢钥吹?,多線程處理的加速效果還是相當(dāng)明顯的。話說牙膏廠超線程的效果還是挺驚人的,不然在雙核CPU上耗時(shí)減少是不可能超過50%的。當(dāng)然物理內(nèi)核的數(shù)量就更重要了。

而且還可以看到一個(gè)現(xiàn)象,在單線程處理下,RGB三通道的處理耗時(shí)是亮度通道處理耗時(shí)3倍略少,約為2.8倍(亮度通道還包括一些在RGB和亮度之間轉(zhuǎn)換的額外計(jì)算量)。而在多線程下,RGB三通道的處理時(shí)間大大小于亮度一個(gè)通道處理時(shí)間的3倍,約為2.38倍。相對(duì)于單線程,節(jié)省的時(shí)間更多了。這是因?yàn)镽GB的處理也是在子塊的一個(gè)線程中處理的,并沒有增加新的線程開銷。因此線程開銷也是必須考慮的一個(gè)因素,不可忽略。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 圖像處理
    +關(guān)注

    關(guān)注

    27

    文章

    1304

    瀏覽量

    56908
  • 多線程
    +關(guān)注

    關(guān)注

    0

    文章

    278

    瀏覽量

    20076

原文標(biāo)題:圖像處理的多線程計(jì)算

文章出處:【微信號(hào):Imgtec,微信公眾號(hào):Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Java多線程的用法

    本文將介紹一下Java多線程的用法。 基礎(chǔ)介紹 什么是多線程 指的是在一個(gè)進(jìn)程中同時(shí)運(yùn)行多個(gè)線程,每個(gè)
    的頭像 發(fā)表于 09-30 17:07 ?1013次閱讀

    基于MIPS多線程處理器的SOC設(shè)計(jì)

    多線程是一種基于硬件或軟件的處理技術(shù),它的主要目標(biāo)是利用計(jì)算工作負(fù)載的并發(fā)性來提高性能。多線程也可以用來區(qū)別各種任務(wù),以便將優(yōu)先權(quán)分配給如語音、視頻或關(guān)鍵數(shù)據(jù)等對(duì)時(shí)間更加敏感的流量。
    發(fā)表于 07-18 06:24

    多線程技術(shù)在串口通信中的應(yīng)用

            首先介紹多線程技術(shù)的基本原理,然后討論了多線程技術(shù)在串口通信中的應(yīng)用,并給出了實(shí)現(xiàn)的方法和步驟。關(guān)鍵詞:
    發(fā)表于 09-04 09:10 ?18次下載

    利用MIPS多線程處理器優(yōu)化SoC設(shè)計(jì)

     多線程是一種基于硬件或軟件的處理技術(shù),它的首要目標(biāo)是計(jì)算型工作中利用并發(fā)來提高性能。多線程也可以用于區(qū)別各種任務(wù),以便可以將優(yōu)先權(quán)分配給更多時(shí)間敏感的流量,如語音、視頻或關(guān)鍵數(shù)據(jù)。而
    發(fā)表于 01-20 06:55 ?2769次閱讀
    利用MIPS<b class='flag-5'>多線程</b><b class='flag-5'>處理</b>器優(yōu)化SoC設(shè)計(jì)

    VC-MFC多線程編程詳解

    VC編程中關(guān)于 MFC多線程編程的詳解文檔
    發(fā)表于 09-01 15:01 ?0次下載

    設(shè)計(jì)多線程和多核系統(tǒng)

    如果您的微控制器應(yīng)用程序需要處理數(shù)字音頻,請(qǐng)考慮采用多線程方法。使用多線程設(shè)計(jì)方法可以使設(shè)計(jì)者以簡(jiǎn)單的方式重用其部分設(shè)計(jì)。
    發(fā)表于 08-14 15:42 ?9次下載
    設(shè)計(jì)<b class='flag-5'>多線程</b>和多核系統(tǒng)

    關(guān)于多線程編程教程及經(jīng)典應(yīng)用案例的匯總分析

    在一個(gè)程序中,這些獨(dú)立運(yùn)行的程序片段叫作線程,利用它編程的概念就叫作多線程處理。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一
    發(fā)表于 10-16 16:46 ?0次下載

    多線程細(xì)節(jié)問題學(xué)習(xí)筆記

    這一次我們要說下關(guān)于final在多線程的作用,原子性的使用,死鎖以及Java中的應(yīng)對(duì)方案,線程的局部變量 和 讀寫鎖的介紹 。關(guān)于final
    發(fā)表于 11-28 15:34 ?1168次閱讀
    <b class='flag-5'>多線程</b>細(xì)節(jié)問題學(xué)習(xí)筆記

    關(guān)于python不能真正多線程問題解析

    多線程,是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)線程,進(jìn)而提升整體
    發(fā)表于 12-01 10:36 ?2598次閱讀
    <b class='flag-5'>關(guān)于</b>python不能真正<b class='flag-5'>多線程</b>問題解析

    多線程好還是單線程好?單線程多線程的區(qū)別 優(yōu)缺點(diǎn)分析

    摘要:如今單線程多線程已經(jīng)得到普遍運(yùn)用,那么到底多線程好還是單線程好呢?單線程多線程的區(qū)別又
    發(fā)表于 12-08 09:33 ?8.2w次閱讀

    mfc多線程編程實(shí)例及代碼,mfc多線程間通信介紹

    摘要:本文主要以MFC多線程為中心,分別對(duì)MFC多線程的實(shí)例、MFC多線程之間的通信展開的一系列研究,下面我們來看看原文。
    發(fā)表于 12-08 15:23 ?1.8w次閱讀
    mfc<b class='flag-5'>多線程</b>編程實(shí)例及代碼,mfc<b class='flag-5'>多線程</b>間通信<b class='flag-5'>介紹</b>

    基于DM6646開發(fā)板的多線程編程在嵌入式圖像處理中的應(yīng)用

    基于DM6646開發(fā)板的多線程編程在嵌入式圖像處理中的應(yīng)用(嵌入式開發(fā)北京)-文檔為基于DM6646開發(fā)板的多線程編程在嵌入式圖像
    發(fā)表于 08-04 15:29 ?10次下載
    基于DM6646開發(fā)板的<b class='flag-5'>多線程</b>編程在嵌入式<b class='flag-5'>圖像</b><b class='flag-5'>處理</b>中的應(yīng)用

    關(guān)于Python多進(jìn)程和多線程詳解

    進(jìn)程(process)和線程(thread)是操作系統(tǒng)的基本概念,但是它們比較抽象,不容易掌握。關(guān)于多進(jìn)程和多線程,教科書上最經(jīng)典的一句話是“進(jìn)程是資源分配的最小單位,線程是CPU調(diào)度
    的頭像 發(fā)表于 11-06 14:46 ?914次閱讀
    <b class='flag-5'>關(guān)于</b>Python多進(jìn)程和<b class='flag-5'>多線程</b>詳解

    多線程如何保證數(shù)據(jù)的同步

    。本文將詳細(xì)介紹多線程數(shù)據(jù)同步的概念、問題、以及常見的解決方案。 一、多線程數(shù)據(jù)同步概念 在多線程編程中,數(shù)據(jù)同步指的是通過某種機(jī)制來確保多個(gè)線程
    的頭像 發(fā)表于 11-17 14:22 ?1329次閱讀

    java實(shí)現(xiàn)多線程的幾種方式

    Java實(shí)現(xiàn)多線程的幾種方式 多線程是指程序中包含了兩個(gè)或以上的線程,每個(gè)線程都可以并行執(zhí)行不同的任務(wù)或操作。Java中的多線程可以提高程序
    的頭像 發(fā)表于 03-14 16:55 ?790次閱讀