在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關于圖像處理的多線程計算介紹

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

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

基本思路:

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

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

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

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

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

單線程和多線程處理時間對比

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

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 圖像處理
    +關注

    關注

    27

    文章

    1295

    瀏覽量

    56799
  • 多線程
    +關注

    關注

    0

    文章

    278

    瀏覽量

    20016

原文標題:圖像處理的多線程計算

文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Java多線程的用法

    本文將介紹一下Java多線程的用法。 基礎介紹 什么是多線程 指的是在一個進程中同時運行多個線程,每個
    的頭像 發表于 09-30 17:07 ?965次閱讀

    基于MIPS多線程處理器的SOC設計

    多線程是一種基于硬件或軟件的處理技術,它的主要目標是利用計算工作負載的并發性來提高性能。多線程也可以用來區別各種任務,以便將優先權分配給如語音、視頻或關鍵數據等對時間更加敏感的流量。
    發表于 07-18 06:24

    多線程技術在串口通信中的應用

            首先介紹多線程技術的基本原理,然后討論了多線程技術在串口通信中的應用,并給出了實現的方法和步驟。關鍵詞:
    發表于 09-04 09:10 ?18次下載

    利用MIPS多線程處理器優化SoC設計

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

    VC-MFC多線程編程詳解

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

    設計多線程和多核系統

    如果您的微控制器應用程序需要處理數字音頻,請考慮采用多線程方法。使用多線程設計方法可以使設計者以簡單的方式重用其部分設計。
    發表于 08-14 15:42 ?9次下載
    設計<b class='flag-5'>多線程</b>和多核系統

    關于多線程編程教程及經典應用案例的匯總分析

    在一個程序中,這些獨立運行的程序片段叫作線程,利用它編程的概念就叫作多線程處理。具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多于一
    發表于 10-16 16:46 ?0次下載

    多線程細節問題學習筆記

    這一次我們要說下關于final在多線程的作用,原子性的使用,死鎖以及Java中的應對方案,線程的局部變量 和 讀寫鎖的介紹 。關于final
    發表于 11-28 15:34 ?1145次閱讀
    <b class='flag-5'>多線程</b>細節問題學習筆記

    關于python不能真正多線程問題解析

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

    多線程好還是單線程好?單線程多線程的區別 優缺點分析

    摘要:如今單線程多線程已經得到普遍運用,那么到底多線程好還是單線程好呢?單線程多線程的區別又
    發表于 12-08 09:33 ?8.1w次閱讀

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

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

    基于DM6646開發板的多線程編程在嵌入式圖像處理中的應用

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

    關于Python多進程和多線程詳解

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

    多線程如何保證數據的同步

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

    java實現多線程的幾種方式

    Java實現多線程的幾種方式 多線程是指程序中包含了兩個或以上的線程,每個線程都可以并行執行不同的任務或操作。Java中的多線程可以提高程序
    的頭像 發表于 03-14 16:55 ?737次閱讀
    主站蜘蛛池模板: 亚洲一区亚洲二区| 亚洲国产女人aaa毛片在线| 五月天久久婷婷| 失禁h啪肉尿出来高h| 欧美成人在线影院| 国产精品福利久久| 婷婷 色天使| 中文字幕精品一区二区2021年| 亚洲aaa视频| 永久免费mv网站入口| 一级做a爰片久久毛片免费| 天堂网在线播放| 欧美 在线播放| 国产呦精品系列在线| 精品视频69v精品视频| 国产午夜免费视频片夜色| 91福利免费视频| 亚洲码欧美码一区二区三区| www色在线| 深爱五月婷婷| 久久久久999| aa黄色大片| 免费深夜视频| 巨骚综合网| 在线天堂中文官网| 日韩电影中文字幕| 国产片无遮挡在线看床戏| 男人天堂伊人| 国产美女一级ba大片免色| 窝窝午夜看片免费视频| 国产精品福利午夜一级毛片| 亚洲小说区图片区另类春色| 亚洲综合色站| 欧美精品首页| www.乱| ww欧洲ww在线视频看| 天天干狠狠干| 欧美黄区| 亚洲在成人网在线看| 欧美大胆一级视频| 夜间免费小视频|