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

Python圖像處理【23】分布式圖像處理

這篇具有很好參考價(jià)值的文章主要介紹了Python圖像處理【23】分布式圖像處理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

0. 前言

Python 已逐漸成為數(shù)據(jù)分析/處理領(lǐng)域中的主要語(yǔ)言,這得益于 Python 豐富的第三方庫(kù),但是,這些庫(kù)的設(shè)計(jì)并未在分布式上進(jìn)行擴(kuò)展。Dask 是為了原生地?cái)U(kuò)展這些 Python 庫(kù)及其生態(tài)系統(tǒng)而開(kāi)發(fā)的,它能夠與現(xiàn)有的 Python 生態(tài)系統(tǒng)兼容,將其擴(kuò)展到多核計(jì)算機(jī)和分布式集群中。

1. Dask 簡(jiǎn)介

Dask 是一個(gè)功能強(qiáng)大,可擴(kuò)展且靈活的并行計(jì)算庫(kù),也是一個(gè)構(gòu)建分布式應(yīng)用程序的平臺(tái)。它可以利用單個(gè)計(jì)算機(jī)的多核CPU,也可以擴(kuò)展至多計(jì)算機(jī)群集。
在本節(jié)中,我們將學(xué)習(xí)如何使用 DaskSobel 濾波器的分布式實(shí)現(xiàn)在圖像中進(jìn)行分布式邊緣檢測(cè)。大型數(shù)據(jù)集通常無(wú)法將所有數(shù)據(jù)放入一個(gè)文件中,因此可能需要將它們分區(qū)并存儲(chǔ)在不同的文件中,有時(shí)甚至可能存儲(chǔ)在不同計(jì)算機(jī)中,為了模擬這種情況,我們將一個(gè)大圖像分為四個(gè)較小的圖像部分,并將這些部分作為單獨(dú)的圖像存儲(chǔ)。然后,我們將介紹如何使用 Dask 讀取這些圖像塊,并在每個(gè)圖像上運(yùn)行分布式邊緣檢測(cè)濾波器,最后組合圖像以獲取完整的邊緣圖像。
為了使用 Dask,我們首先需要使用 pip 命令進(jìn)行安裝:

$ pip install dask
$ pip install dask_image 

2. 使用 Dask 進(jìn)行分布式圖像處理

(1) 導(dǎo)入所有必需的庫(kù),模塊和函數(shù):

from skimage.io import imread, imsave
from skimage.color import rgb2gray
import numpy as np
import matplotlib.pylab as plt
import dask_image.imread
import dask.array
import dask_image.ndfilters
import os, glob
from IPython.display import display

(2) 實(shí)現(xiàn)函數(shù) partion_image() 以分割圖像,將圖像分割為不重疊的圖像塊(默認(rèn)情況下為 2x2=4 個(gè)圖像),然后,將這些文件保存到同一文件夾中:

def partion_image(imgfile, n_h=2, n_w=2, plot=True):
    im = imread(imgfile)
    h, w, _ = im.shape
    h_s, w_s = h // n_h, w // n_w
    k = 0
    for i in range(n_h):
        for j in range(n_w):
            imsave(imgfile[:-4] + '_part_{:03d}'.format(k) + imgfile[-4:], im[i*h_s:(i+1)*h_s, j*w_s:(j+1)*w_s, :])          
            k += 1
    if plot:
        k = 0
        plt.figure(figsize=(20,16))
        plt.subplots_adjust(0,0,1,1,0.05,0.05)
        for i in range(n_h):
            for j in range(n_w):
                im = plt.imread(imgfile[:-4] + '_part_{:03d}'.format(k) + imgfile[-4:])
                plt.subplot(n_h, n_w, k+1), plt.imshow(im), plt.title('image part-{}'.format(k+1), size=20)
                k += 1
        plt.show()

(3) 調(diào)用函數(shù) partion_image() 將輸入圖像分塊:

def plot_image(image):
    plt.figure(figsize=(20,20))
    plt.imshow(image, cmap='gray')
    plt.show()

imgfile = 'save.png'
partion_image(imgfile)

Python圖像處理【23】分布式圖像處理,Python圖像處理實(shí)戰(zhàn),python,圖像處理,分布式

(4) 使用 dask_image的imread() 函數(shù)讀取所有圖像塊:

filename_pattern = os.path.join('./', imgfile[:-4] + '_part_*' + imgfile[-4:])
partitioned_images = dask_image.imread.imread(filename_pattern)
print(partitioned_images)
# dask.array<_map_read_frame, shape=(4, 467, 825, 3), dtype=uint8, chunksize=(1, 467, 825, 3), chunktype=numpy.ndarray>

從以上輸出可以看出,創(chuàng)建了一個(gè) dask 數(shù)組,其形狀為 (4, 467, 825, 3),這意味著它包含四個(gè)圖像幀,每個(gè)圖像幀具有 467 行、825 列和 3 個(gè)顏色通道。

2.1 將 RGB 圖像塊轉(zhuǎn)換為灰度圖像塊

RGB 圖像塊轉(zhuǎn)換為灰度圖像塊的語(yǔ)法與將函數(shù)應(yīng)用于多個(gè)圖像或 Dask 塊是相同的,這就是為什么 skimage.colors 中的 rgb2gray() 函數(shù)可以直接應(yīng)用于 Dask 圖像塊。

(1) 繪制獲得的第一個(gè)灰度圖像塊,Dask 能夠使用現(xiàn)有的 scikit-image 函數(shù)將圖像塊轉(zhuǎn)換為灰度:

result  = (rgb2gray(partitioned_images))
print(result.shape)
plot_image(result[0])

Python圖像處理【23】分布式圖像處理,Python圖像處理實(shí)戰(zhàn),python,圖像處理,分布式
(2) 使用 dask.array.block() 函數(shù),利用圖像塊創(chuàng)建組合圖像,并繪制組合圖像:

data = [result[i, ...] for i in range(result.shape[0])]
data = [data[i:i+2] for i in range(0, len(data), 2)]
combined_image = dask.array.block(data)
print(combined_image.shape)    
plot_image(combined_image)

Python圖像處理【23】分布式圖像處理,Python圖像處理實(shí)戰(zhàn),python,圖像處理,分布式

2.2 使用分布式 Sobel 濾波器檢測(cè)圖像邊緣

(1) 使用 Dask 自動(dòng)為每個(gè)塊創(chuàng)建計(jì)算圖:

edges = dask_image.ndfilters.sobel(combined_image)
print(edges)
display(edges.visualize())

Python圖像處理【23】分布式圖像處理,Python圖像處理實(shí)戰(zhàn),python,圖像處理,分布式

上圖顯示了 Dask 計(jì)算圖,從圖中可以明顯的看出許多步驟能夠并行完成。

(2) 最后,裁剪輸出圖像的像素值,使值在 [0,1] 范圍內(nèi),并繪制邊緣輸出圖像:

edges = np.clip(edges, 0, 1)
plot_image(edges)

Python圖像處理【23】分布式圖像處理,Python圖像處理實(shí)戰(zhàn),python,圖像處理,分布式

小結(jié)

分布式處理可以將位于不同地點(diǎn)的、或具有不同功能的、或擁有不同數(shù)據(jù)的多臺(tái)計(jì)算機(jī)通過(guò)通信網(wǎng)絡(luò)連接起來(lái),在控制系統(tǒng)的統(tǒng)一管理控制下,協(xié)調(diào)地完成大規(guī)模信息處理任務(wù),利用分布式處理可以提高信息處理速度。在本節(jié)中,我們學(xué)習(xí)了如何使用 Dask 完成分布式圖像處理,從而提高圖像處理速度。

系列鏈接

Python圖像處理【1】圖像與視頻處理基礎(chǔ)
Python圖像處理【2】探索Python圖像處理庫(kù)
Python圖像處理【3】Python圖像處理庫(kù)應(yīng)用
Python圖像處理【4】圖像線性變換
Python圖像處理【5】圖像扭曲/逆扭曲
Python圖像處理【6】通過(guò)哈希查找重復(fù)和類似的圖像
Python圖像處理【7】采樣、卷積與離散傅里葉變換
Python圖像處理【8】使用低通濾波器模糊圖像
Python圖像處理【9】使用高通濾波器執(zhí)行邊緣檢測(cè)
Python圖像處理【10】基于離散余弦變換的圖像壓縮
Python圖像處理【11】利用反卷積執(zhí)行圖像去模糊
Python圖像處理【12】基于小波變換執(zhí)行圖像去噪
Python圖像處理【13】使用PIL執(zhí)行圖像降噪
Python圖像處理【14】基于非線性濾波器的圖像去噪
Python圖像處理【15】基于非銳化掩碼銳化圖像
Python圖像處理【16】OpenCV直方圖均衡化
Python圖像處理【17】指紋增強(qiáng)和細(xì)節(jié)提取
Python圖像處理【18】邊緣檢測(cè)詳解
Python圖像處理【19】基于霍夫變換的目標(biāo)檢測(cè)
Python圖像處理【20】圖像金字塔
Python圖像處理【21】基于卷積神經(jīng)網(wǎng)絡(luò)增強(qiáng)微光圖像
Python圖像處理【22】基于卷積神經(jīng)網(wǎng)絡(luò)的圖像去霧文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-842545.html

到了這里,關(guān)于Python圖像處理【23】分布式圖像處理的文章就介紹完了。如果您還想了解更多內(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)文章

  • 分布式調(diào)用與高并發(fā)處理 Zookeeper分布式協(xié)調(diào)服務(wù)

    分布式調(diào)用與高并發(fā)處理 Zookeeper分布式協(xié)調(diào)服務(wù)

    單機(jī)架構(gòu) 一個(gè)系統(tǒng)業(yè)務(wù)量很小的時(shí)候所有的代碼都放在一個(gè)項(xiàng)目中就好了,然后這個(gè)項(xiàng)目部署在一臺(tái)服務(wù)器上,整個(gè)項(xiàng)目所有的服務(wù)都由這臺(tái)服務(wù)器提供。 缺點(diǎn): 服務(wù)性能存在瓶頸,用戶增長(zhǎng)的時(shí)候性能下降等。 不可伸縮性 代碼量龐大,系統(tǒng)臃腫,牽一發(fā)動(dòng)全身 單點(diǎn)故障

    2024年02月12日
    瀏覽(101)
  • 微服務(wù)分布式事務(wù)處理

    微服務(wù)分布式事務(wù)處理

    當(dāng)我們向微服務(wù)架構(gòu)遷移時(shí),如何處理好分布式事務(wù)是必須考慮的問(wèn)題。這篇文章介紹了分布式事務(wù)處理的兩種方案,可以結(jié)合實(shí)際采用合適的解決方案。原文:Handling Distributed Transactions in the Microservice world [1] 如今每個(gè)人(包括我)都在思考、構(gòu)建微服務(wù),分布式系統(tǒng)是微服

    2024年02月04日
    瀏覽(21)
  • 分布式處理框架 MapReduce

    分布式處理框架 MapReduce

    3.2.1 什么是MapReduce 源于Google的MapReduce論文(2004年12月) Hadoop的MapReduce是Google論文的開(kāi)源實(shí)現(xiàn) MapReduce優(yōu)點(diǎn): 海量數(shù)據(jù)離線處理易開(kāi)發(fā) MapReduce缺點(diǎn): 實(shí)時(shí)流式計(jì)算 3.2.2 MapReduce編程模型 MapReduce分而治之的思想 數(shù)錢(qián)實(shí)例:一堆鈔票,各種面值分別是多少 單點(diǎn)策略 一個(gè)人數(shù)所有的鈔票

    2024年02月11日
    瀏覽(19)
  • 分布式異步任務(wù)處理組件(四)

    分布式異步任務(wù)處理組件(四)

    基于zookeeper的HA集群設(shè)計(jì)思路-- 各個(gè)節(jié)點(diǎn)都可以消費(fèi)任務(wù),但是由主節(jié)點(diǎn)來(lái)投票; 主節(jié)點(diǎn)通過(guò)注冊(cè)zookeeper的臨時(shí)節(jié)點(diǎn)來(lái)選舉--主節(jié)點(diǎn)需要同步從節(jié)點(diǎn)的信息 正常工作機(jī)制--各個(gè)節(jié)點(diǎn)(包括主節(jié)點(diǎn)本身)在執(zhí)行任務(wù)之前詢問(wèn)主節(jié)點(diǎn),主節(jié)點(diǎn)通過(guò)布隆過(guò)濾器判斷該任務(wù)是否被執(zhí)行

    2024年02月14日
    瀏覽(18)
  • 分布式異步任務(wù)處理組件(八)

    分布式異步任務(wù)處理組件(八)

    分布式異步任務(wù)組件網(wǎng)絡(luò)通信線程模型設(shè)計(jì)-- 大概說(shuō)一下功能場(chǎng)景: 從節(jié)點(diǎn)和主節(jié)點(diǎn)建立連接,負(fù)責(zé)和主節(jié)點(diǎn)的網(wǎng)絡(luò)IO通信,通信動(dòng)作包括投票,心跳,舉證等,步驟為讀取主節(jié)點(diǎn)的信息,寫(xiě)入IO隊(duì)列中,然后從IO隊(duì)列中讀取解碼,翻譯成具體的協(xié)議命令,發(fā)送給上層線程處理

    2024年02月13日
    瀏覽(17)
  • 分布式異步任務(wù)處理組件(二)

    一些關(guān)鍵點(diǎn)的設(shè)計(jì)腦暴記錄----very important?。?! 首先,任務(wù)存儲(chǔ)交給kafka,由節(jié)點(diǎn)負(fù)責(zé)寫(xiě)入kafka,acks=1;失敗重試;透?jìng)鱧afka的提交可靠性,保證任務(wù)提交成功;后續(xù)可以考慮自己實(shí)現(xiàn)kafka相關(guān)機(jī)制---做局部?jī)?yōu)化,因?yàn)閺?qiáng)依賴kafka 如何保證消息唯一被消費(fèi)一次---集群狀態(tài)維護(hù)全

    2024年02月15日
    瀏覽(21)
  • 分布式異步任務(wù)處理組件(五)

    分布式異步任務(wù)處理組件(五)

    節(jié)點(diǎn)上線和下線的邏輯-- 節(jié)點(diǎn)下線分為兩種--心跳失敗主動(dòng)或被動(dòng)和主節(jié)點(diǎn)斷開(kāi)連接,但是節(jié)點(diǎn)本身沒(méi)有發(fā)生重啟;第二種就是節(jié)點(diǎn)宕機(jī)重啟--其實(shí)這兩中情況下處理邏輯都是一樣的,只是節(jié)點(diǎn)本身如果還能消費(fèi)到kafka的時(shí)候可以繼續(xù)執(zhí)行任務(wù)但是不能從kafka中拉取新的消息,

    2024年02月14日
    瀏覽(18)
  • 分布式異步任務(wù)處理組件(七)

    分布式異步任務(wù)處理組件(七)

    分布式異步任務(wù)處理組件底層網(wǎng)絡(luò)通信模型的設(shè)計(jì)--如圖: 使用Java原生NIO來(lái)實(shí)現(xiàn)TCP通信模型 普通節(jié)點(diǎn)維護(hù)一個(gè)網(wǎng)絡(luò)IO線程,負(fù)責(zé)和主節(jié)點(diǎn)的網(wǎng)絡(luò)數(shù)據(jù)通信連接--這里的網(wǎng)絡(luò)數(shù)據(jù)是指組件通信協(xié)議之下的直接面對(duì)字節(jié)流的數(shù)據(jù)讀寫(xiě),上層會(huì)有另一個(gè)線程負(fù)責(zé)網(wǎng)絡(luò)通信協(xié)議的實(shí)現(xiàn)

    2024年02月14日
    瀏覽(32)
  • 分布式事務(wù)的安全與加密處理

    分布式事務(wù)是在多個(gè)獨(dú)立的系統(tǒng)之間進(jìn)行協(xié)同工作時(shí),需要保證事務(wù)的原子性、一致性、隔離性和持久性的一種場(chǎng)景。隨著分布式系統(tǒng)的普及和發(fā)展,分布式事務(wù)的應(yīng)用也越來(lái)越廣泛。然而,分布式事務(wù)的安全與加密處理是一個(gè)非常重要的問(wèn)題,需要深入了解其核心概念、算

    2024年01月23日
    瀏覽(34)
  • 分布式任務(wù)調(diào)度,定時(shí)任務(wù)的處理方案

    分布式任務(wù)調(diào)度,定時(shí)任務(wù)的處理方案

    適用場(chǎng)景: Spring 定時(shí)任務(wù)是 Spring 框架提供的一種輕量級(jí)的任務(wù)調(diào)度方案,它的特點(diǎn)是簡(jiǎn)單易用、輕量級(jí)。Spring 定時(shí)任務(wù)的執(zhí)行是在 單個(gè)節(jié)點(diǎn) 上進(jìn)行的,如果需要分布式任務(wù)調(diào)度,需要自己實(shí)現(xiàn)相應(yīng)的解決方案。 1.導(dǎo)入依賴版本自己控制 2.啟動(dòng)類加上@EnableScheduling 3.編寫(xiě)業(yè)

    2023年04月14日
    瀏覽(46)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包