專利名稱:圖像處理設備、方法和存儲有程序的存儲介質的制作方法
技術領域:
本發明涉及一種圖像處理裝置、方法以及存儲程序的存儲介質,具體地,本發明涉及一種配有圖像處理部的圖像處理裝置,所述圖像處理部被構造為包括從多種類型的圖像處理模塊中選擇的一個或更多個圖像處理模塊,并且本發明涉及一種可被應用于所述圖像處理裝置的圖像處理方法,并涉及一種存儲用于使計算機用作圖像處理裝置的圖像處理程序的存儲介質。
背景技術:
在圖像處理裝置、桌面印刷(DTP)系統、打印系統等上對輸入的圖像數據執行各種類型的圖像處理,諸如放大/縮小、旋轉、仿射變換(affine transformation)、色彩轉換、濾波處理、圖像合成等。在這樣的裝置和系統中,當輸入的圖像數據或內容的屬性、過程、參數等固定時,圖像處理由設計為專用于該圖像處理的硬件來執行。但是,當屬性變化多樣時或者當輸入具有不同的色彩空間或不同的每像素比特數的各種圖像數據作為輸入的圖像數據時,需要靈活地改變圖像處理的結構。為了滿足這種需求,存在一些這樣的技術,在這些技術中,多個可編程處理模塊以管線(pipeline)形式或有向無環圖(DAG)形式連接。
但是,存在著以下問題。在各圖像處理模塊,根據圖像處理的類型和內容,存在容易處理的單位(例如,像素為單位、一行為單位、多行為單位、一整幅圖像為單位等)。為了將各圖像處理模塊以任意順序進行組合并且彼此合作執行處理,所有圖像處理模塊的輸出的單位必須一致,或者說,必須構建各圖像處理模塊。因此,圖像處理模塊的結構變得復雜。此外,由于各圖像處理模塊與其它圖像處理模塊協同工作,所以除了對輸入的圖像數據實際執行圖像處理的部分外,各圖像處理模塊還需要控制從與該模塊自身相連接的其它圖像處理模塊接收圖像數據和向所述其它圖像處理模塊發送圖像數據的處理的部分。因此,各圖像處理模塊的結構變得更加復雜。
而且,各緩沖存儲器被構建為保持與其前后連接的圖像處理模塊的處理內容相對應的區域,并且僅僅用于保持處理的中間進展。因此,當給定的圖像處理模塊被改變時,需要根據該圖像處理模塊的處理內容以及位于緩沖存儲器之前和之后的圖像處理模塊的處理內容等來改變性能。
發明內容
鑒于上述問題而提出本發明,并且本發明提供了一種圖像處理設備、圖像處理方法和存儲有圖像處理程序的存儲介質,其組合了任意圖像處理模塊,并且使得可以執行所期望的圖像處理,而不會導致各個圖像處理模塊的結構的復雜性。
本發明的一方面提供了一種圖像處理設備,其包括圖像處理部,該圖像處理部具有(A)一個或更多個圖像處理模塊,每一個圖像處理模塊都具有(1)圖像處理引擎,其以預先設定的單位處理數據量為單位對圖像數據進行預定的圖像處理;以及(2)控制部,其以所述圖像處理引擎以所述單位處理數據量為單位進行處理所需的數據量單位,來輸入從其自身模塊的前級獲取的圖像數據,并將由所述圖像處理引擎進行了預定圖像處理的圖像數據,或者該預定圖像處理的處理結果輸出給其自身模塊的后級,所述一個或更多個圖像處理模塊是從多種類型的圖像處理模塊中選擇的,在該多種類型的圖像處理模塊中由所述圖像處理引擎執行的圖像處理的類型或內容彼此不同;以及(B)一個或更多個緩沖器模塊,其具有用于存儲圖像數據的緩沖器,所述圖像處理部由以管線形式或有向無環圖形式連接的多個單獨模塊構成,從而所述緩沖器模塊連接在被選擇的各個圖像處理模塊的前級和后級中的至少一個上,并且所述緩沖器模塊具有緩沖器控制部,其中該緩沖器控制部在其自身模塊的后級連接有圖像處理模塊的情況下,對連接在其自身模塊的后級的圖像處理模塊的數量進行識別,對于所述后級的各個圖像處理模塊,對存儲在所述緩沖器中的圖像數據當中的未讀取圖像數據的頭位置進行存儲,并且在每次從其自身模塊的后級的任意圖像處理模塊請求圖像數據時,都執行下述的處理,即,使得作為讀取請求源的各個圖像處理模塊以在其自身模塊的后級的各個單獨的圖像處理模塊處對其自身模塊預先設定的讀取數據量或者以在每次請求圖像數據時指定的讀取數據量,從與作為讀取請求源的圖像處理模塊相對應的頭位置讀取存儲在所述緩沖器中的圖像數據。
與本發明相關的圖像處理模塊具有圖像處理引擎和控制部。該圖像處理引擎以預先設定的單位處理數據量為單位對圖像數據進行預定的圖像處理。該控制部以所述圖像處理引擎以所述單位處理數據量為單位進行處理所需的數據量單位,來輸入從其自身模塊的前級獲取的圖像數據,并將由所述圖像處理引擎進行了預定圖像處理的圖像數據,或者該預定圖像處理的處理結果輸出給其自身模塊的后級。在本發明中,準備了多種類型的圖像處理模塊,在該多種類型的圖像處理模塊中由所述圖像處理引擎執行的圖像處理的類型或內容彼此不同。所述圖像處理部是通過使用從所述多種類型的圖像處理模塊當中選擇的一個或更多個圖像處理模塊而構成的。注意,為構造所述圖像處理部而選擇的圖像處理模塊可以是分別不同的圖像處理模塊,或者可以被選擇為使得這些圖像處理模塊的部分或整體彼此重疊。在本發明中,所述圖像處理部由以管線形式或有向無環圖形式連接的多個單獨模塊構成,從而具有用于存儲圖像數據的緩沖器的緩沖器模塊連接在被選擇的各個圖像處理模塊的前級和后級中的至少一個上。
與本發明相關的緩沖器模塊具有緩沖器控制部。在其自身模塊的后級連接有圖像處理模塊的情況下,該緩沖器控制部對連接在其自身模塊的后級的圖像處理模塊的數量進行識別。該緩沖器控制部對所述后級的各個圖像處理模塊,對存儲在所述緩沖器中的圖像數據當中的未讀取圖像數據的頭位置進行存儲。在每次從其自身模塊的后級的任意圖像處理模塊請求圖像數據時,該緩沖器控制部都執行下述的處理,即,使得作為讀取請求源的圖像處理模塊以在其自身模塊的后級的各個單獨的圖像處理模塊處對其自身模塊預先設定的讀取數據量或者以在每一次請求圖像數據時指定的讀取數據量,從與作為讀取請求源的圖像處理模塊相對應的頭位置讀取存儲在所述緩沖器中的圖像數據。
注意,上述單位處理數據量和寫入數據量可以是圖像的一行,或者可以是包括圖像的多行、整個圖像、圖像的一個像素等在內的任意字節數量中的任何一個。此外,使得從緩沖器讀取圖像數據可以通過將其中存儲有作為讀取對象的圖像數據的存儲區域的地址通知給其自身模塊的后級的圖像處理模塊來執行,或者可以通過將作為讀取對象的數據復制到從該后級的圖像處理模塊通知的地址的存儲區域來執行。其中存儲有作為讀取對象的圖像數據的存儲區域可以是所述后級的圖像處理模塊不能對所存儲的內容進行改變的存儲區域,或者可以是所述后級的圖像處理模塊可以對所存儲的內容進行改變的存儲區域。
這樣,在本發明中,即使在緩沖器模塊的后級連接有多個圖像處理模塊的情況下,也可以任意設定在各個圖像處理模塊從緩沖器模塊讀取圖像數據時的讀取數據量。因此,連接在緩沖器模塊的后級的圖像處理模塊無需使圖像數據的獲取單位與其他圖像處理模塊的一致。因此,可以根據各個圖像處理模塊的圖像處理引擎所執行的圖像處理的類型等對該圖像處理引擎處的單位處理數據量進行優化,并且可以實現對各個圖像處理模塊的圖像處理引擎所執行的圖像處理的優化(提高速度、改善圖像質量等)。
此外,由于緩沖器模塊的執行上述控制的緩沖器控制部,而使得連接在緩沖器模塊的后級的圖像處理模塊的控制部無需對連接在該緩沖器模塊的后級的圖像處理模塊的數量進行識別,并且無需執行諸如根據所識別的圖像處理模塊的數量進行切換控制等的處理。因此,圖像處理模塊的控制部的結構可以得到簡化。因此,根據本發明,可以組合任意圖像處理模塊并執行所期望的圖像處理,而不會導致各個圖像處理模塊的結構變得復雜。
由于上述結構,使得本發明具有下述的優異效果組合任意圖像處理模塊并使得可以執行所期望的圖像處理,而不會導致各個圖像處理模塊的結構變得復雜。
將基于以下附圖而詳細描述本發明的實施例,在附圖中圖1是示出了與實施例相關的計算機(圖像處理裝置)的示例性結構的框圖;圖2A是示出了由資源管理部執行的初始化處理的內容的流程圖;圖2B是示出了由資源管理部執行的、第三管理方法中對內存保留請求的處理的內容的流程圖;圖2C是示出了由資源管理部執行的、第三管理方法中對內存釋放請求的處理的內容的流程圖;圖2D是示出了由資源管理部執行的對資源保留請求的處理的內容的流程圖;圖2E是示出了由資源管理部執行的對資源釋放請求的處理的內容的流程圖;圖3是解釋應用程序的處理的序列圖;圖4A是示出了由模塊生成部執行的模塊生成處理的內容的流程圖,圖4B是解釋工作流管理部的表的示意圖;圖5A至5C是示出了圖像處理部的結構示例的框圖;圖6是示出了由緩沖器模塊的緩沖器控制部執行的緩沖器控制處理的內容的流程圖;圖7是示出了由緩沖器模塊的緩沖器控制部執行的請求接收中斷處理的內容的流程圖;圖8是示出了由緩沖器模塊的緩沖器控制部執行的數據寫入處理的內容的流程圖;圖9A至9C是解釋在作為寫入對象的圖像數據跨越多個用于存儲的單位緩沖區的情況下的處理的示意圖;圖10是示出了由緩沖器模塊的緩沖器控制部執行的數據讀取處理的內容的流程圖;圖11A至11C是解釋在作為讀取對象的圖像數據跨越多個用于存儲的單位緩沖區的情況下的處理的示意圖;圖12是示出了由圖像處理模塊的控制部執行的圖像處理模塊初始化處理的內容的流程圖;圖13是示出了由圖像處理模塊的控制部執行的圖像處理模塊控制處理的內容的流程圖;圖14是示出了由圖像處理模塊的控制部執行的自身模塊刪除處理的內容的流程圖;圖15A是示出了圖像處理模塊的示意性結構以及在圖像處理模塊處執行的處理的框圖,并且圖15B是示出了緩沖器模塊的示意性結構以及在緩沖器模塊處執行的處理的框圖;圖16A至16D是示出了由處理管理部執行的塊單位控制處理的內容的流程圖;圖17A至17D是示出了由處理管理部執行的整幅圖像控制處理的內容的流程圖;圖18是解釋塊單位處理和整幅圖像處理的流程的示意圖;圖19是示出了由處理管理部執行的錯誤發生中斷處理的內容的流程圖;和圖20是解釋在緩沖器模塊直接從前面的圖像處理模塊請求圖像數據的情況下的塊單位處理的流程的示意圖。
具體實施例方式
在下文中,將參照附圖詳細描述本發明的實施例的示例。圖1示出了作為圖像處理裝置的計算機10。可將該計算機10并入到必須在其內部執行圖像處理的任意圖像處理裝置,諸如復印機、打印機、傳真機、具有前述設備的功能的多功能設備、掃描儀、照片打印機等。此外,計算機10可以是獨立的計算機,諸如個人計算機(PC)等。此外,計算機10可以是并入到便攜式裝置(諸如PDA(個人數字助理)、蜂窩電話等)中的計算機。
計算機10具有CPU 12、內存14、顯示器16、操作部18、存儲器20、圖像數據供應部22和圖像輸出部24,它們通過總線26連接到一起。在將計算機10并入到如上述的那些圖像處理裝置的情況下,計算機10可包括分別設置在該圖像處理裝置上的由LCD等構成的顯示面板、數字鍵等(作為顯示器16和操作部18)。此外,如果計算機10是獨立的計算機,則顯示器16可以是顯示器,操作部18可以是鍵盤、鼠標等,它們連接到計算機。而且,硬盤驅動器(HDD)適合作為存儲器20,但是代替地,可使用其他的非易失性存儲介質,諸如閃存等。
圖像數據供應部22提供作為處理對象的圖像數據。例如,可將用于讀取記錄在記錄材料(諸如紙或照相膠卷等)上的圖像并輸出圖像數據的圖像讀取部、或通過通信線路從外部接收圖像數據的接收部、或存儲圖像數據的圖像存儲部(內存14或存儲器20)等用作圖像數據供應部22。此外,圖像輸出部24輸出經過了圖像處理的圖像數據或由這樣的圖像數據表示的圖像。例如,可將用于將由圖像數據表示的圖像記錄到記錄材料(諸如紙或感光材料等)上的圖像記錄部、或者將由圖像數據表示的圖像顯示到顯示器等上的顯示部、或者將圖像數據寫到記錄介質的寫入裝置、或者通過通信線路發送圖像數據的發送部用作圖像輸出部24。此外,圖像輸出部24可以是僅存儲經過了圖像處理的圖像數據的圖像存儲部(內存14或存儲器20)。
如圖1所示,存儲器20存儲由CPU 12執行的各種程序操作系統30的程序,其控制對資源(諸如內存14等)的管理、對CPU 12執行程序的管理、計算機10和外部之間的通信等;圖像處理程序組34,其使計算機10用作本發明涉及的圖像處理裝置;和各種類型的應用(application)32的程序(在圖1中示為“應用程序組32”),其使得由CPU 12執行前述圖像處理程序組實現的圖像處理裝置執行期望的圖像處理。
出于減輕開發可被用于各種類型的圖像處理裝置和便攜式裝置、PC等中的圖像處理程序的開發負擔的目的,圖像處理程序組34是這樣的程序,將其開發為能夠在前述各種類型的圖像處理裝置和諸如便攜式裝置、PC等的各種裝置(平臺)中通用。圖像處理程序組34對應于本發明涉及的圖像處理程序。由圖像處理程序組34實現的圖像處理裝置構建執行圖像處理的圖像處理部,并且基于來自應用32的指令由所述圖像處理部(將在后面描述細節)執行圖像處理。圖像處理程序組34為應用32提供用于指示圖像處理部的構建的接口,該接口還用于指示由所構建的圖像處理部執行圖像處理。因此,當在內部執行圖像處理的任意裝置是新開發的裝置時,僅開發應用32就可獲得執行圖像處理的程序。通過使用所述接口,應用32使圖像處理程序組34執行該裝置所需的圖像處理。由于不再需要新開發實際執行圖像處理的程序,所以可減輕開發負擔。
如上所述,由圖像處理程序組34實現的圖像處理裝置構建執行由應用32指示的圖像處理的圖像處理部,并且由構建的圖像處理部執行圖像處理。因此,即使在例如作為圖像處理的對象的圖像數據的色彩空間或每像素比特數不固定或者內容、過程、參數由于應用32指示重建圖像處理部而不固定的情況下,也可根據處理的圖像數據等靈活地改變由圖像處理裝置(圖像處理部)執行的圖像處理。
在下文中將描述圖像處理程序組34。如圖1所示,圖像處理程序組34被寬泛地分為模塊庫36、對應于構建部的處理構建部42的程序、以及處理管理部46的程序。處理構建部42基于來自應用的指令構建圖像處理部50。如圖5所示,圖像處理部50由一個或更多個圖像處理模塊38和緩沖器模塊40構成。它們以管線形式或有向無環圖(DAG)形式連接在一起。圖像處理模塊38執行圖像處理。緩沖器模塊40存儲圖像數據,緩沖器模塊40布置在各圖像處理模塊38的前一級和后一級中的至少一級。
構成圖像處理部50的各圖像處理模塊自身是由CPU 12執行的第一程序或由CPU 12執行的第二程序,所述第一程序用于使CPU 12執行預定的圖像處理,所述第二程序用于指示執行針對未在圖1中示出的外部圖像處理裝置(例如專用圖像處理卡等)的處理。圖像處理模塊38的分別執行不同的圖像處理(例如,輸入處理、濾波處理(filter processing)、色彩轉換處理、放大/縮小處理、斜交角檢測處理、圖像旋轉處理、圖像合成處理、輸出處理等)的多種程序分別登記在模塊庫36中。在下文中,為了簡化解釋,將給出構成圖像處理部50的各單獨的圖像處理模塊自身為前述第一程序的情況的描述。
如圖15A所示,各圖像處理模塊38由圖像處理引擎38A和控制部38B構成。圖像處理引擎38A每預定單位處理數據量地對圖像數據執行圖像處理。控制部38B執行與位于該圖像處理模塊38的前一級和后一級的模塊的圖像數據的輸入和輸出,并控制圖像處理引擎38A。根據圖像處理引擎38A執行的圖像處理的類型等,從任意數量的字節(諸如圖像的一行、圖像的多行、圖像的一個像素、一幅圖像(整幅圖像)等)中預先選擇并設置各圖像處理模塊38的單位處理數據量。例如,在執行色彩轉換處理和濾色處理的圖像處理模塊38中,單位處理數據量是一個像素。在執行放大/縮小處理的圖像處理模塊38中,單位處理數據量是圖像的一行或圖像的多行。在執行圖像旋轉處理的圖像處理模塊38中,單位處理數據量是圖像的一整幅圖像。在執行圖像壓縮/解壓縮處理的圖像處理模塊38中,單位處理數據量是N個字節,其取決于執行環境。
在其中圖像處理的類型相同但是所執行的圖像處理的內容不同的圖像處理模塊38也被登記在模塊庫36中。(在圖1中,這些類型的圖像處理模塊被標示為“模塊1”和“模塊2”)。例如,對于執行放大/縮小處理的圖像處理模塊38,存在多個圖像處理模塊38,諸如通過將每隔一個像素去掉而將輸入的圖像數據縮小50%的執行縮小處理的圖像處理模塊38以及按照為輸入的圖像數據指定的放大/縮小率執行放大/縮小處理的圖像處理模塊38等。此外,例如,對于執行色彩轉換處理的圖像處理模塊38,存在將RGB色彩空間轉換成CMY色彩空間的圖像處理模塊38、以相反方式進行轉換的圖像處理模塊38和執行另一色彩空間轉換(諸如L*a*b*空間等)的圖像處理模塊38等。
為了輸入所需的圖像數據量以在圖像處理引擎38處執行處理,控制部38B從其自身模塊(當前模塊)的前一模塊(例如緩沖器模塊40)以單位讀取數據量為單位獲取圖像數據,并將從圖像處理引擎38A輸出的圖像數據以單位寫入數據量為單位輸出到后一模塊(例如緩沖器模塊40)。
如果在圖像處理引擎38A中不執行涉及數據量增加或減少的圖像處理(諸如壓縮等),則單位寫入數據量等于單位處理數據量。或者,控制部38B執行將由圖像處理引擎38A進行的圖像處理的結果輸出到其自身模塊的外部的處理(例如,如果圖像處理引擎38A執行圖像分析處理(諸如斜交角檢測處理等),則可輸出圖像分析處理的結果(諸如檢測斜交角的結果等)取代圖像數據)。在其中圖像處理引擎38A所執行的圖像處理的類型和內容相同但是前述單位處理數據量或單位讀取數據量或單位寫入數據量不同的圖像處理模塊38也登記在模塊庫36中。例如,雖然先前提到執行圖像旋轉處理的圖像處理模塊38的單位處理數據量是一整幅圖像,但是在模塊庫36中也可包括執行相同的圖像旋轉處理而其單位處理數據量為圖像的一行或圖像的多行的圖像處理模塊38。
在模塊庫36中登記的各圖像處理模塊38的程序由對應于圖像處理引擎38A的程序和對應于控制部38B的程序構成。對應于控制部38B的程序被制成部件(part)。不管在圖像處理引擎38A執行的圖像處理的類型和內容如何,在多個單獨的圖像處理模塊38之中,對于單位讀取數據量和單位寫入數據量相同的圖像處理模塊38,對應于控制部38B的程序是通用的(相同的程序被用作對應于控制部38B的程序)。這樣,減少了開發圖像處理模塊38的程序的開發負擔。
在多個圖像處理模塊38之中,存在這樣的圖像處理模塊,輸入的圖像的屬性未知,單位讀取數據量和單位寫入數據量不固定,并且獲得了輸入圖像數據的屬性,通過執行將獲得的屬性帶入預定的算術運算公式的算術運算,而固定單位讀取數據量和單位寫入數據量。
對于此類型的圖像處理模塊38,滿足使用相同的算術運算公式推導單位讀取數據量和單位寫入數據量的圖像處理模塊38通用對應于控制部38B的程序。
此外,圖像處理程序組34可以實現在如上所述的各種類型的裝置中。在圖像處理程序組34之中,登記在模塊庫36中的圖像處理模塊38的數量和類型等當然可根據其中實現有圖像處理程序組34的裝置所要求的圖像處理而適當添加、刪除、替換等。
如圖15B所示,構成圖像處理部50的各緩沖器模塊40由緩沖器40A和緩沖器控制部40B構成。緩沖器40A由內存區構成,該內存區通過操作系統30從計算機10設置的內存14中保留(reserve)。緩沖器控制部40B執行與位于該緩沖器模塊40的前一級和后一級的模塊的圖像數據的輸入和輸出,并且對緩沖器40A進行管理。各緩沖器模塊40的緩沖器控制部40B自身也是由CPU 12執行的程序,緩沖器控制部40B的程序也登記在模塊庫36中(在圖1中,緩沖器控制部40B的程序被標示為“緩沖器模塊”)。
構建由應用32指示的圖像處理部50的處理構建部42由如圖1所示的多種類型的模塊生成部44構成。該多種類型的模塊生成部44對應于彼此不同的圖像處理,并且通過由應用32啟動而執行從圖像處理模塊38和緩沖器模塊40中生成用于實現對應的圖像處理的模塊組的處理。
圖1示出了與登記在模塊庫36中的單獨的圖像處理模塊38執行的圖像處理的類型相對應的模塊生成部44,作為模塊生成部44的示例。對應于單獨的模塊生成部44的圖像處理可以是由多種類型的圖像處理模塊38實現的圖像處理(例如,由斜交角檢測處理和圖像旋轉處理構成的偏斜校正處理)。在所需的圖像處理是組合了多種類型的圖像處理的處理的情況下,應用32順序啟動對應于所述多種類型的圖像處理的某一種的模塊生成部44。這樣,執行所需圖像處理的圖像處理部50由應用32順序啟動的模塊生成部44構建。
如圖1所示,處理管理部46包括工作流管理部46A,其控制圖像處理部50對圖像處理的執行;資源管理部46B,其管理計算機10的內存14和資源的使用;和錯誤管理部46C,其管理圖像處理部50處出現的錯誤。圖像處理部50工作而并行地執行圖像處理,同時以小于一整幅圖像的數據量為單位將圖像數據發送到后一級(這被稱為塊單位處理)。此外,部50這樣工作,在前一圖像處理模塊38完成了對一整幅圖像的圖像數據的圖像處理后,后一圖像處理模塊38才執行對該一整幅圖像的圖像數據的圖像處理(這被稱為整幅圖像處理)。作為工作流管理部46A的程序,存在使圖像處理部50執行塊單位處理的程序,以及使圖像處理部50執行整幅圖像處理的程序。
接下來將描述本實施例的操作。當打開計算機10的電源時,資源管理部46B啟動,資源管理部46B如圖2A所示執行初始化處理。
在本實施例中,有三種類型的管理方法作為資源管理部46B管理內存的方法,可選擇和設置由這些管理方法中的哪個來執行內存管理。第一個是第一管理方法,每次有來自圖像處理部50的單獨模塊的請求時,該方法通過操作系統30從內存14中保留分配給作為請求源的模塊的內存區。第二個是第二管理方法,該方法通過操作系統30預先從內存14中保留給定大小的內存區,當有來自單獨模塊的請求時將預先保留的所述內存區的部分區域分配給作為請求源的模塊。第三個是第三管理方法,該方法通過操作系統30預先從內存14中保留給定大小的內存區,當有來自單獨模塊的請求時,如果請求的內存區的大小小于閾值,則將預先保留的所述內存區的部分區域分配給作為請求源的模塊,如果請求的內存區的大小大于或等于閾值,則通過操作系統保留分配給作為請求源的模塊的內存區。應該注意,本發明不限于此,也可以使用其它的內存管理方法。
例如,如下地選擇這些管理方法。第一管理方法尤其適合于這些情況諸如該方法被沒有內存限制等的應用程序使用或者期望抑制由于復雜的內存管理而引起的程序大小的增加等。此外,第二管理方法適合于這種情況根據本發明執行圖像處理的整個應用可使用的內存量有限,并且需要在此范圍內工作。另一方面,第三管理方法適合于這種情況必須使保留和釋放存儲器所需的處理時間為高速,這是因為在保留和釋放短期內存區時使用操作系統30的內存保留/釋放功能會增加開銷。
在圖2A所示的初始化處理的步驟100中,判斷選擇并設定的內存管理方法是否是第二管理方法或第三管理方法。在將圖像處理程序組34實現到計算機10之中時可選擇并設定內存管理方法。或者,資源管理部46B可獲得計算機10的系統環境(例如,內存14的大小、或其中實現有圖像處理程序組34的裝置的類型等),可基于獲得的系統環境自動選擇并設置內存管理方法。如果內存管理方法是第一管理方法,則前述判斷結果是否定的,初始化處理結束。但是如果該判斷結果是肯定的,則程序繼續運行到步驟102,在步驟102,通過操作系統30從設置在計算機10上的內存14中保留預定大小的內存區(連續的區域),程序結束。同樣可根據系統環境等選擇并設置前述的預定大小。
這里,如果內存管理方法是第一管理方法,則響應于其后生成的內存保留請求,保留通過操作系統30請求的內存區,類似地,響應于內存釋放請求,通過操作系統釋放該內存區。由于這些處理與通常的程序中使用的處理類似,所以省略對其的解釋。
如果內存管理方法是第二管理方法,則響應于其后生成的內存保留請求,從在先前步驟102中預先保留的內存區中狀態為“未使用”的未使用區中搜索并保留對應于該請求的大小的內存區。將保留的內存區的狀態改成“已使用”,并將保留的內存區傳遞給請求源。對于內存釋放請求,被請求釋放的內存區被并入預先保留的內存區的未使用區,執行處理將并入的內存區的狀態從“已使用”改為“未使用”。例如,通過表或鏈表等,可管理表示內存區的狀態是未使用還是已使用的信息。
接下來,將描述第三管理方法。當生成了內存保留請求時,資源管理部46B執行如圖2B所示的針對內存保留請求的處理。在對內存保留請求的處理中,在步驟104中,判斷請求的大小是否小于或等于預先設置的閾值。如果請求的大小不小于也不等于該閾值,則在步驟106中,以與第一管理方法相同的方式,通過操作系統30保留請求的大小的內存區,在步驟108中,將保留的內存區的頭地址登記在資源管理部46B的表中。可使用另一方式(諸如列表或關聯數組等)代替表。如果在步驟104中判斷出請求的大小小于或等于閾值,則以與第二管理方法相同的方式,從在先前的步驟102中預先保留的內存區的未使用區中保留請求的大小的內存區(步驟110),將保留區的狀態改為“已使用”(步驟112)。然后,在步驟114中,保留的內存區被傳遞給請求源。
此外,在第三管理方法中,當生成了內存釋放請求時,資源管理部46B執行如圖2C所示的對內存釋放請求的處理。在對內存釋放請求的處理中,在步驟116中,判斷在前述表中是否登記有被請求釋放的內存區的頭地址。如果步驟116中的判斷結果是肯定的,則被請求釋放的內存區是通過操作系統30保留的內存區。因此,在步驟118中,通過操作系統30釋放被請求釋放的內存區,在下一步驟120中,從前述表中刪除所請求釋放的內存區的頭地址。此外,如果步驟116中的判斷結果是否定的,則請求釋放的內存區是從在先前的步驟102中預先保留的內存區中保留的內存區。因此,在步驟122中將被請求釋放的內存區并入先前保留的內存區的未使用區,并在步驟124中將并入的內存區的狀態改為“未使用”。在這些處理之后,在步驟126中,通知給請求源釋放了所請求的內存區,針對內存釋放請求的處理結束。
接下來,將給出向資源管理部46B請求內存之外的資源(例如特定文件等)的保留/釋放的情況的解釋。當輸入了資源保留請求時,資源管理部46B執行圖2D示出的針對資源保留請求的處理。在針對資源保留請求的處理中,在步驟130中,通過操作系統30保留被請求保留的資源。在下一步驟132中,將保留的資源的地址登記在資源管理部46B的表中,與識別作為請求源的模塊的信息相對應。在步驟134中,將保留的資源傳遞給請求源,處理結束。此外,當輸入資源釋放請求時,資源管理部46B執行圖2E示出的針對資源釋放請求的處理。在針對資源釋放請求的處理中,在步驟136中,讀取與識別作為請求源的模塊的信息相對應地登記在資源管理部46B的表中的信息(保留的資源的地址)。在下一步驟138中,通過操作系統30釋放由讀取的信息表示的所有資源。此外,在步驟140中,這樣更新表,即,從表中刪除與釋放的資源相對應的信息。在下一步驟142中,通知請求源釋放了資源,處理結束。
這樣,在內存之外的資源的保留/釋放中,在保留時,將保留的資源登記在表中,在釋放時,將登記在表中的資源(根據來自相同請求源的請求而保留的資源)全部釋放。因此,與其中資源釋放請求源指定要釋放的資源的方法相比,可確定地釋放資源。在這些內存和資源保留/釋放處理中,存在這樣的情況在處理過程中,存在由資源不足等引起的處理失敗。在這種情況下,需要諸如通知錯誤管理部46C等的處理。但是,為了簡化解釋,這里將省略對這種錯誤處理的描述。
另一方面,當在具有圖像處理程序組34的裝置處出現實現圖像處理的情形時,特定的應用32檢測該情形,并且由該應用32執行圖3中示出的處理。有一些實現圖像處理的情形的示例,其中,由用作圖像數據供應部22的圖像讀取部讀取圖像,用戶指示執行這樣的作業由用作圖像輸出部24的圖像記錄部將圖像記錄為記錄材料上的圖像、或者將圖像顯示為用作圖像輸出部24的顯示部上的圖像、或者由用作圖像輸出部24的寫入裝置將圖像數據寫到記錄介質上、或者由用作圖像輸出部24的發送/接收部發送圖像數據、或者將圖像數據存儲在用作圖像輸出部24的圖像存儲部,或者是這樣的情況,用戶指示執行這樣的作業對于由用作圖像數據供應部22的接收部接收的圖像數據或者存儲在用作圖像數據供應部22的圖像存儲部中的圖像數據,執行前述的記錄在記錄材料上、顯示在顯示部上、寫到記錄介質中、發送、存儲在圖像存儲部中的任何一個。此外,需要執行圖像處理的情形不限于上述的那些,例如,其可以是在應用32可執行的處理的名字等根據用戶的指示以列表的形式顯示在顯示器16上的狀態下,用戶選擇了作為執行對象的處理的情況等。
當該情形出現時,必須如上所述地執行某些類型的圖像處理。應用32首先識別提供要處理的圖像數據的圖像數據供應部22的類型(參照圖3的步驟150)。當識別出的類型是緩沖區(內存14的部分區域)時(即,在圖3的步驟152的判斷結果為肯定的情況下),生成包括被標示為圖像數據供應部22的緩沖區的緩沖器模塊40(同樣可參照圖3的步驟154)。由緩沖器控制部40B執行后面將描述的緩沖器模塊40的新生成。通過生成執行緩沖器模塊40的緩沖器控制部40B程序的進程、線程或對象,生成緩沖器控制部40B。通過生成用作緩沖器40A的、由生成的緩沖器控制部40B保留的內存區,生成所述新生成。但是,是通過設置參數(所述參數使(緩沖器控制部40B)將指定的緩沖區識別為已被保留的緩沖器40A)并執行生成緩沖器控制部40B的處理,來實現步驟154中的緩沖器模塊40的生成的。在這里生成的緩沖器模塊40起圖像數據供應部22的作用。
接下來,以與上述方式相同的方式,應用32識別圖像輸出部24(其用作被執行了圖像處理的圖像數據的輸出目的地)的類型(參照圖3的步驟156)。如果識別出的類型是緩沖區(內存14的部分區域)(即,如果圖3的步驟158的判斷結果是肯定的),則以與上述方式相同的方式生成緩沖器模塊40,該緩沖器模塊40包括被指定為圖像輸出部24的緩沖區(參照圖3的步驟160)。在這里生成的緩沖器模塊40起圖像輸出部24的作用。此外,應用32識別要執行的圖像處理的內容,將要執行的圖像處理分為與單獨的模塊生成部44相對應的等級的圖像處理的組合,并判斷為了實現要執行的圖像處理所需的圖像處理的類型以及單獨的圖像處理的執行順序(參照圖3的步驟162)。例如通過將前述類型的圖像處理和單獨的圖像處理的執行順序預先登記為與作業(可由用戶指示其執行)的類型對應的信息,并由應用32讀出與已指示了其執行的作業的類型相對應的信息,來實現所述判斷。
然后,基于以上判斷的圖像處理的類型和執行的順序,應用32啟動對應于執行順序中的第一個圖像處理的模塊生成部44(即,生成執行模塊生成部44的程序的進程、線程或對象)。其后(參照圖3的步驟164),應用32通知已啟動的模塊生成部44以下信息作為該模塊生成部44生成模塊組所需的信息輸入模塊識別信息,用于識別將圖像數據輸入到該模塊組的輸入模塊;輸出模塊信息,用于識別該模塊組將圖像數據輸出至的輸出模塊;輸入圖像屬性信息,表示被輸入到該模塊組的輸入圖像數據的屬性;和要執行的圖像處理的參數,并且應用32指示生成相應的模塊組(參照圖3的步驟166)。
對于位于執行順序的第一位的模塊組,圖像數據供應部22是前述輸入模塊。對于位于執行順序的第二位或其后的模塊組,前一級模塊組的最后一個模塊(通常是緩沖器模塊40)是輸入模塊。此外,在位于執行順序的最后一位的模塊組,圖像輸出部24是前述輸出模塊,因此,圖像輸出部24被指定為輸出模塊。在其它的模塊組,輸出模塊不固定。因此,當應用32未進行指定并且需要該指定時,由模塊生成部44生成并設置輸出模塊。此外,例如可以將輸入圖像屬性和圖像處理的參數預先登記為與可由用戶指定執行的作業的類型相對應的信息,并且應用32通過讀出與已指示其執行的作業的類型相對應的信息。或者可由用戶指定輸入圖像的屬性和圖像處理的參數。
另一方面,當應用32啟動了模塊生成部44時,模塊生成部44執行圖4A中示出的模塊生成處理(參照圖3中的步驟168)。在該模塊生成處理中,在步驟200中,在模塊生成部44判斷是否有接下來要生成的圖像處理模塊38。如果判斷結果是否定的,則模塊生成處理結束。如果存在要生成的圖像處理模塊38,則在步驟202中,模塊生成部44獲得表示輸入圖像數據的屬性的輸入圖像屬性信息。在下一步驟204中,模塊生成部44還考慮到在步驟202中獲得的信息表示的輸入圖像數據的屬性,判斷是否有必要生成在前面的步驟200中已判斷為要生成的圖像處理模塊38。
具體地,例如,對應于正在執行模塊生成處理的模塊生成部44是生成用于執行色彩轉換處理的模塊組的模塊生成部。應用32根據圖像處理的參數將CMY色彩空間指定為輸出圖像數據的色彩空間。當基于在步驟202中獲得的輸入圖像屬性信息,輸入圖像數據是RGB色彩空間數據時,需要生成將RGB色彩空間轉換為CMY色彩空間的圖像處理模塊38作為執行色彩空間處理的圖像處理模塊38。但是,當輸入圖像數據是CMY色彩空間時,針對該色彩空間,輸入圖像數據的屬性和輸出圖像數據的屬性匹配,因此可判斷出不需要生成執行色彩空間轉換處理的圖像處理模塊38。如果判斷出不必生成圖像處理模塊38,則程序返回到步驟200。
當在所生成的圖像處理模塊38的前一級存在緩沖器模塊40時,通過從圖像處理模塊38獲得輸出圖像數據的屬性,可實現獲得輸入圖像數據的屬性的處理。這里,所述圖像處理模塊38是自將圖像數據寫到該緩沖器模塊40的圖像處理模塊38的更前面的圖像處理模塊38。
在下一步驟206中,判斷在生成的圖像處理模塊38的后一級是否需要緩沖器模塊40。在該圖像處理模塊38的后一級是輸出模塊(圖像輸出部24)的情況下(例如,參照在圖5A至圖5C中示出的圖像處理部50的最后一級的圖像處理模塊38的情況),或者在所述圖像處理模塊是對圖像數據執行諸如分析之類的圖像處理并將其結果輸出到另一圖像處理模塊38的模塊的情況下(例如,圖5B中示出的圖像處理部50中執行斜交角檢測處理的圖像處理模塊38的情況),所述判斷結果是否定的,程序繼續前進到步驟210而不生成緩沖器模塊40。在上述情況之外的情況下,所述判斷結果是肯定的,程序前進到步驟208,在步驟208,通過啟動緩沖器控制部40B(即,生成執行緩沖器控制部40B的程序的進程、線程或對象),生成連接在圖像處理模塊38的后一級的緩沖器模塊40。當模塊生成部44(或者前述應用32)啟動了緩沖器控制部40B時,執行圖6所示的緩沖器控制處理。后面將描述該緩沖器控制處理。
在下一步驟210中,根據前級和后級的模塊(例如這兩個模塊都是緩沖器模塊40)的信息、處理參數和輸入圖像數據的屬性生成圖像處理模塊38。
當在步驟206中判斷出不需要后面的緩沖器模塊40時,不向圖像處理模塊38提供后面的緩沖器模塊40的信息。此外,在處理內容固定并且不需要特殊圖像處理參數的情況下(例如50%的縮小處理的情況),不提供處理參數。
在模塊生成處理(步驟210)中,從登記在模塊庫36中的多個候選模塊中選擇圖像處理模塊38,匹配在步驟202中獲得的輸入圖像數據的屬性和要在圖像處理模塊38中執行的處理參數。例如,當模塊生成部44生成執行色彩轉換處理的模塊組時,應用32基于處理參數將CMY色彩空間指定為輸出圖像數據的色彩空間。此外,在此情況下,當輸入圖像數據是RGB色彩空間的數據時,圖像處理模塊38將RGB色彩空間轉換為CMY色彩空間。如上所述,從登記在模塊庫36中并且執行各種類型的色彩空間處理的多種類型的圖像處理模塊38之中選擇適合于所述處理的圖像處理模塊38。
此外,如果圖像處理模塊是執行放大/縮小處理的圖像處理模塊38并且指定的放大/縮小率不是50%,則選擇按為輸入的圖像數據指定的放大/縮小率執行放大/縮小處理的圖像處理模塊38。如果指定的放大/縮小率為50%,則選擇專門按50%的放大/縮小率執行放大/縮小處理的圖像處理模塊38,即,通過將每隔一個像素去掉而執行將輸入的圖像數據縮小50%的縮小處理的圖像處理模塊38。圖像處理模塊38的選擇不限于以上描述。例如,可在模塊庫36中登記圖像處理引擎38A進行的圖像處理中的單位處理數據量不同的多個圖像處理模塊38,并根據諸如可分配給圖像處理部50的內存區的大小之類的操作環境,選擇適當的單位處理數據量的圖像處理模塊38(例如,前述大小越小,就選擇越小的單位處理數據量的圖像處理模塊38等)。或者由應用32或用戶選擇圖像處理模塊38。
在下一步驟212中,將后面的緩沖器模塊40的ID和生成的圖像處理模塊38的ID的組通知工作流管理部46A。這些ID是可用于唯一地區分這些單獨的模塊的信息。例如,該ID可以是按生成這些單獨的模塊的順序應用的數字,或者可以是緩沖器模塊40和圖像處理模塊38的對象在內存中的地址等。通知給工作流管理部46A的信息例如以如圖4B所示的表的形式或者以列表的形式或者以關聯數組的形式等保存在工作流管理部46A內,并且在后面的處理中使用。在下文中,將按照以表的形成保存所述信息的情況繼續解釋。
在如前所述的沒有后面的緩沖器模塊40的圖像處理模塊38的情況下,根據例如下面的方法執行處理。在生成的圖像處理模塊38是管線的終點或者有向無環圖的終點之一的情況下(諸如執行圖5A中的輸出處理的圖像處理模塊38的情況),將該圖像處理模塊38作為模塊生成部44的輸出,返回給作為調用源的應用32。
此外,在執行諸如圖5B中的斜交角檢測處理的圖像處理模塊38的情況下,在該情況下,在該生成的圖像處理模塊38處的圖像處理的結果在另一圖像處理模塊(執行圖5B中的圖像旋轉處理的圖像處理模塊38)中使用,模塊生成部44指示重復執行處理,直到關于該圖像處理模塊38的處理完成,并且模塊生成部44獲得處理結果。
當步驟212的處理結束時,控制返回步驟200,模塊生成部44判斷是否有接下來要生成的圖像處理模塊。單獨的模塊生成部44生成執行相應的給定圖像處理的模塊組。因此,通過針對各單獨的模塊生成部44預先登記并讀出以何種連接關系生成何種圖像處理模塊相關的信息,或者通過在操縱模塊生成部44的程序中對此進行描述,可實現所述判斷。例如,在模塊生成部44生成執行由多種類型的圖像處理模塊38實現的圖像處理(例如傾斜校正處理,其由執行斜交角檢測處理的圖像處理模塊38和執行圖像旋轉處理的圖像處理模塊38實現)的模塊組的情況下,生成包含兩個或更多個圖像處理模塊38的模塊組。
當被指示生成模塊組的模塊生成部44向應用32通知完成了如上所述的模塊組的生成時,應用32基于圖3的步驟162中的判斷結果,判斷為了實現要求的圖像處理,是否還需要生成執行其它圖像處理的模塊組。如果圖像處理要求將多種類型的圖像處理組合,則應用32啟動對應于單獨的圖像處理的其它模塊生成部44,并順序執行給出模塊組生成所需信息的通知的處理(同樣可參照圖3的步驟170和172)。然后,由于被順序啟動的模塊生成部44順序執行(參照圖3的步驟174)上述模塊生成處理(圖4),所以按照圖5A至圖5C中示出的示例構造執行所要求的圖像處理的圖像處理部50。
根據本實施例,當執行特定圖像處理的頻率較高等時,即使在生成執行該特定圖像處理的圖像處理部50之后,應用32也不指示用于生成執行該特定圖像處理的圖像處理部50的多個模塊生成部44結束處理,并將它們保持為進程、線程或對象。每次出現執行該特定圖像處理的需要時,通過順序指示保持為進程、線程或對象的模塊生成部44生成模塊組,可重新生成執行特定圖像處理的圖像處理部50。這樣,每次出現執行特定圖像處理的需要時,不需要用于分別啟動相應的模塊生成部44的處理,并且可縮短重新生成執行特定圖像處理的圖像處理部50所需的時間。
當被模塊生成部44啟動時,圖像處理模塊38的控制部38B(見圖15A)執行圖12示出的圖像處理模塊初始化處理。在該圖像處理模塊初始化處理中,首先在步驟250中,由于模塊生成部44執行模塊生成處理(圖4)的步驟210的處理,所以控制部38B存儲從模塊生成部44提供的其自身模塊的前一級和后一級的模塊的信息。此外,在下一步驟252中,基于其自身模塊的圖像處理引擎38A執行的圖像處理的類型和內容等,控制部38B識別其自身模塊使用的內存的大小以及其自身模塊使用的其它資源。其自身模塊使用的內存主要是為了圖像處理引擎38A執行圖像處理所需要的內存。但是,在前面的模塊是圖像數據供應部22的情況下或者在后面的模塊時圖像輸出部24的情況下,可能需要用作緩沖器的內存,該內存用于在從前一級和后一級模塊接收數據或者向前一級和后一級模塊發送數據時暫時存儲圖像數據。此外,在處理參數中包括表之類的信息的情況下,可能需要存儲其的內存區。然后,在步驟254中,將在步驟252中識別的大小通知資源管理部46B,請求資源管理部46B保留該通知的大小的內存區。
在圖2中示出的資源管理處理(資源管理部46B)中,當圖像處理模塊38和緩沖器模塊40請求保留內存區時,在選擇并設置的內存管理方法是例如第一管理方法的情況下,通過操作系統30從內存14中保留由作為內存保留請求源的模塊通知的大小的內存區(連續區域)。然后,通過將保留的內存區的頭地址通知給作為內存保留請求源的模塊,將保留的內存區傳遞給作為內存保留請求源的模塊。此外,如果內存管理方法是第二管理方法,則從預先保留的內存區的未使用區中保留通知的大小的內存區(連續區域),并且將保留的內存區改為“已使用”,將保留的內存區傳遞給內存保留請求源。而且,如果選擇并設置的內存管理方法是第三管理方法,則通過執行上述針對內存保留請求的處理(見圖2B),執行對通知的大小的內存區的保留和傳遞。
在圖12顯示的圖像處理模塊初始化處理(圖像處理模塊38的控制部38B)中,當通過上述處理經由資源管理部46B保留了所需的內存區時,在下一步驟256中,基于前面的步驟252的處理結果,判斷其自身模塊(的圖像處理引擎38A)是否需要內存之外的資源。如果判斷結果是否定的,則程序繼續進行到步驟262而不執行任何處理。如果判斷結果是肯定的,則程序繼續進行到步驟258,在步驟258,將其自身模塊所需的內存之外的資源的類型等通知給資源管理部46B,并且請求資源管理部46B保留通知的其它資源,資源管理部46B對它們進行保留。
接下來,在步驟262中,控制部38B判斷其自身模塊的前面的模塊,如果不存在其自身模塊的前面的模塊,則程序繼續前進到步驟272。如果前面的模塊不同于緩沖器模塊40,例如是圖像數據供應部22和特定文件等,則按需要在步驟270中執行其初始化處理,并且程序進行到步驟272。此外,在存在其自身模塊的前面的模塊并且該前面的模塊是緩沖器模塊40的情況下,程序從步驟262進行到步驟264,并且對從前面的緩沖器模塊40讀取一次圖像數據而獲得的圖像數據的數據量(即,單位讀取數據量)進行識別。如果其自身模塊的前面的緩沖器模塊40的數量為一,存在一單位讀取數據量。但是,在諸如前面的緩沖器模塊40為多個時并且圖像處理引擎38A通過使用從該多個緩沖器模塊40的每一個獲得的圖像數據來執行圖像處理的情況下,諸如在圖5C所示的圖像處理部50中執行圖像合成處理的圖像處理模塊38的情況下,根據其自身模塊的圖像處理引擎38A執行的圖像處理的類型和內容、前面的緩沖器模塊40的數量等,確定與各前面的緩沖器模塊40相對應的單位讀取數據量。
在步驟266中,通過將在步驟264中識別的單位讀取數據量通知單個前面的緩沖器模塊40,設置了針對該緩沖器模塊40的單位讀取數據量(還參照圖15A的(1))。在下一步驟268中,判斷是否在其自身模塊的所有前面的緩沖器模塊40處設置了單位讀取數據量。如果其自身模塊的前面的緩沖器模塊40的數量是一,則該判斷結果是肯定的,并且程序前進到步驟272。如果前面的緩沖器模塊40的數量是多于一個,則在步驟268的判斷結果是否定的,并且程序返回到步驟266,重復步驟266和268直到步驟268的判斷結果變成肯定的。這樣,為所有前面的緩沖器模塊40分別設置了單位讀取數據量。
在步驟272中,控制部38B判斷其自身模塊的后面的模塊。在其自身模塊的后面的模塊不同于緩沖器模塊40,例如是圖像輸出部24或特定文件等的情況下,按需要在步驟278中執行其初始化處理,并且程序繼續進行到步驟280。例如,如果后面的模塊是由圖像記錄部、顯示部、寫入部或發送部的任何一個構成的圖像輸出部24,則執行針對該圖像輸出部24的處理作為前述初始化處理。這里,所述處理通知以與單位寫入數據量相對應的數據量為單位輸出了圖像數據。此外,如果后面的模塊是緩沖器模塊40,則在步驟274中識別寫入一次圖像數據的數據量(即,單位寫入數據量)。在步驟276中,在后面的緩沖器模塊中設置該單位寫入數據量(還參照圖15A的(2)),其后,程序繼續進行到步驟280。在步驟280中,通知模塊生成部44該圖像處理模塊初始化處理已完成,并且圖像處理模塊初始化處理結束。
另一方面,當模塊生成部44或應用32啟動構成圖像處理部50的單獨的緩沖器模塊40的緩沖器控制部40B(見圖15B)時,緩沖器控制部40B執行圖6所示的緩沖器控制處理。在該緩沖器控制處理中,當模塊生成部44或應用32啟動緩沖器控制部40B并且已指示生成緩沖器模塊40時,在步驟356中,等待的請求的數目被初始化為0。在下一步驟358中,判斷其自身模塊的前面的圖像處理模塊38是否通知了單位寫入數據量或者其自身模塊的后面的圖像處理模塊38是否已通知了單位讀取數據量。如果判斷結果是否定的,則程序繼續進行到步驟362,在步驟362中,判斷與其自身模塊相連的所有圖像處理模塊38是否都已通知了單位寫入數據量或單位讀取數據量。如果判斷結果是否定的,則程序返回步驟358,重復步驟358和362,直到步驟358或362的判斷結果是肯定的。
當與其自身模塊相連的特定的圖像處理模塊38通知了單位寫入數據量或單位讀取數據量時,步驟358中的判斷結果是肯定的,程序進行到步驟360,在步驟360中,存儲所通知的單位寫入數據量或單位讀取數據量。其后,程序返回到步驟358。因此,每次由于與其自身模塊相連的單獨的圖像處理模塊38的控制部38B執行圖像模塊初始化處理(圖12)的步驟266或步驟276的處理而從單獨的圖像處理模塊38通知了單位寫入數據量或單位讀取數據量時,都存儲所通知的單位寫入數據量或單位讀取數據量,并且在緩沖器模塊40設置通知的單位寫入數據量或單位讀取數據量(還參照圖15B的(1)和(2))。
當與其自身模塊相連的所有圖像處理模塊38都通知了圖像寫入數據量或圖像讀取數據量并且分別設置了所通知的單位寫入數據量和單位讀取數據量時,步驟362中的判斷結果是肯定的,程序繼續進行到步驟364。在步驟364中,基于與其自身模塊相連的單獨的圖像處理模塊38分別設置的單位寫入數據量和單位讀取數據量,緩沖器控制部40B確定作為其自身模塊的緩沖器40A的管理單位的單位緩沖區的大小,并存儲所確定的單位緩沖區的大小。在其自身模塊處設置的單位寫入數據量和單位讀取數據量的最大值適合于單位緩沖區的大小。但是,可將單位寫入數據量設置為單位緩沖區的大小,或者可將單位讀取數據量(在多個圖像處理模塊連接在其自身模塊的后一級的情況下,為由單獨的圖像處理模塊38分別設置的單位讀取數據量的最大值)設置為單位緩沖區的大小。或者,可設置單位寫入數據量和單位讀取數據量(的最大值)的最小公倍數。或者,如果該最小公倍數小于預定值,則可設置該最小公倍數,否則如果該最小公倍數大于或等于預定值,則可將另一值(例如,前述單位寫入數據量和單位讀取數據量的最大值、或者單位寫入數據量、或者單位讀取數據量(的最大值)中的任何一個)設置為單位緩沖區的大小。
在下一步驟366中,緩沖器控制部40B判斷是否已提供了用作其自身模塊的緩沖器40A的內存區。如果其自身模塊是由模塊生成部44生成的,則該判斷結果是否定的,并且在步驟368中將緩沖器標志設置為0。其后,程序繼續進行到步驟374。此外,如果其自身模塊是由應用32生成的并且是起圖像數據供應部22和圖像輸出部24的作用的緩沖器模塊40,則用作其自身模塊的緩沖器40A的內存區已經存在。因此,步驟366的判斷結果是肯定的,并且程序繼續進行到步驟370。在步驟370中,將在先前的步驟364中確定的單位緩沖區的大小改變為建立的內存區的大小,該建立的內存區被用作其自身模塊的緩沖器40A。此外,在下一步驟372中,將緩沖器標志設置為1,其后,程序繼續進行到步驟374。
在步驟374中,緩沖器控制部40B生成與其自身模塊的單獨的后面的圖像處理模塊38相對應的各個有效數據指針,并初始化各生成的有效數據指針。有效數據指針分別指示由前面的圖像處理模塊寫入其自身模塊的緩沖器40A中的圖像數據之中沒有被相應的后面的圖像處理模塊38讀取的圖像數據(有效數據)的頭位置(下一讀取起始位置)和結束位置。在步驟374的初始化處理中,通常設置特定信息,該特定信息意味著有效數據不存在。如果其自身模塊是由應用32生成的并且是起圖像提供部22的作用的緩沖器模塊40,則存在這樣的情況作為圖像處理的對象的圖像數據已被寫入用作其自身模塊的緩沖器40A的內存區中。在這種情況下,將該圖像數據的頭位置和結束位置分別設置為與單獨的后面的圖像處理模塊38相對應的有效數據指針。
如上所述,緩沖器模塊40的初始化處理完成,在下一步驟376中,通知工作流管理部46A初始化處理完成。此外,在步驟378中,判斷是否設置了大于0的值,作為針對在先前的步驟356中為其執行了初始設置的等待請求的數目。如果判斷結果是否定的,則程序繼續進行到步驟380。判斷是否已從連接在其自身模塊的前一級或后一級的圖像處理模塊38接收到刪除通知,該刪除通知給出要執行刪除圖像處理模塊38的處理的通知。如果該判斷結果也是否定的,則程序返回到步驟378,重復步驟378和步驟380,直到任一判斷為肯定的。
另一方面,當由于由模塊生成部44進行的上述模塊生成處理(見圖4)而完成了執行所需的圖像處理的圖像處理部50的構建時,應用32判斷圖像處理的執行形式是塊單位處理還是整幅圖像處理。然后,通過啟動執行與判斷出的執行形式相對應的工作流管理部46A的程序的進程、線程或對象,應用32指示工作流管理部46A執行圖像處理部50的圖像處理(還參照圖3的步驟176)。
根據圖像處理的執行形式啟動不同的程序。當圖像處理的執行形式是塊單位處理時,處理管理部46的工作流管理部46A執行圖16所示的塊單位控制處理。此外,當圖像處理的執行形式是整幅圖像處理時,46A執行圖17所示的整幅圖像處理。塊單位處理和整幅圖像控制處理分別對應于圖3的步驟178中示出的圖像處理部控制處理。在塊單位處理或整幅圖像控制處理中,由于工作流管理部46A將處理請求輸入到構成圖像處理部50的圖像處理模塊38之中的預定的圖像處理模塊38,所以以塊單位或整幅圖像的執行形式執行圖像處理部50的圖像處理。
在下文中,在描述圖像處理部50的整體操作之前,將按順序描述在由單獨的緩沖器模塊40的緩沖器控制部40B執行的初始化處理完成之后的處理、和由單獨的圖像處理模塊38的控制部38B執行的圖像處理模塊控制處理。
在本實施例中,在圖像處理模塊38將圖像數據寫到后面的緩沖器模塊40的情況下,從圖像處理模塊38將寫入請求輸入到緩沖器模塊40。在圖像處理模塊38從前面的緩沖器模塊40讀取圖像數據的情況下,從圖像處理模塊38將讀請求輸入到緩沖器模塊40。因此,當從其自身模塊的前面的圖像處理模塊38輸入寫入請求時,或者當從其自身模塊的后面的圖像處理模塊38輸入數據請求時,由于出現中斷,所以緩沖器模塊40的緩沖器控制部40B執行圖7所示的請求接收中斷處理。應該注意到,在下文中,給出了以出現中斷為前提的描述,但是,也可像通常的程序那樣,處理因方法或函數的調用而開始。在此情況下,可使用為各請求執行處理的結構,而請求不像后面的描述那樣在隊列中排隊。
在請求接收中斷處理中,首先,在步驟400中,在隊列的尾部登記識別將寫入請求或數據請求輸入到其自身模塊的請求源的請求源識別信息和表示請求的類型(寫入或讀取)的請求類型信息作為請求信息。在分配給單獨的緩沖器模塊40的內存上分別形成這些隊列。此外,在下一步驟402中,將等待請求的數量加一,請求接收中斷處理結束。由于該請求接收中斷處理,每次從特定緩沖器模塊40的前一級或后一級的圖像處理模塊將寫入請求或讀請求輸入到該特定緩沖器模塊40時,在對應于該特定緩沖器模塊40的隊列中順序登記與輸入的寫入請求或讀請求相對應的請求信息,并且等待請求的數量被逐個增加。
當由于執行上述請求接收中斷處理而使等待請求的數量變成大于或等于1的值時,緩沖器控制處理(圖6)的步驟378的判斷結果是肯定的,程序繼續進行到步驟382,在步驟382中,從隊列頭取出請求信息。在下一步驟384中,基于在步驟382中取出的請求信息中包括的請求類型信息,判斷與取出的請求信息相對應的請求的類型(寫入或讀取),程序根據該判斷的結果而分支。如果請求類型是寫入請求,則程序從步驟384繼續進行到步驟386,執行圖8所示的數據寫入處理。
在數據寫入處理中,首先,在步驟410,判斷緩沖器標志是否設置為1,即,其自身模塊(當前模塊)是否是由應用32生成的緩沖器模塊40。如果該判斷結果是肯定的,則因為已經保留了用作緩沖器40A的內存區,所以程序繼續進行到步驟422而不執行任何處理。如果步驟410中的判斷結果是否定的,即,如果其自身模塊是由模塊生成部44生成的緩沖器模塊40,則程序進行到步驟412。在步驟412中,判斷在構成其自身模塊的緩沖器40A的單位緩沖區中是否存在具有空閑空間區域的單位緩沖區(圖像數據沒有寫至其末端的單位緩沖區)。
在由模塊生成部44生成的緩沖區40,最初并沒有保留用作緩沖器40A的內存區(單位緩沖區),而是每次內存區出現不足時作為單位保留單位緩沖區。因此,當將寫入請求第一次輸入到緩沖器模塊40時,用作緩沖器40A的內存區(單位緩沖區)并不存在,因而該判斷結果將是否定的。此外,在通過后面將描述的處理保留了用作緩沖器40A的單位緩沖區之后,在將圖像數據寫到單位緩沖區時該單位緩沖區剛好變滿的情況下,前述判斷結果同樣將是否定的。
如果步驟412中的判斷結果是否定的,則程序繼續進行到步驟414。在步驟414中,基于從隊列取出的請求信息中包括的請求源識別信息來識別作為寫入請求源的圖像處理模塊38,并且識別由作為寫入請求源的圖像處理模塊38設置的單位寫入數據量,其后,判斷該所識別的單位寫入數據量是否大于在先前的步驟364(圖6)中確定的單位緩沖區的大小。在采用在其自身模塊設置的單位寫入數據量和單位讀取數據量的最大值的情況下,或者采用在其自身模塊設置的單位寫入數據量的情況下,該判斷將總是否定的,程序繼續進行到步驟420。在步驟420中,將要保留的內存區的大小(單位緩沖區的大小)通知給資源管理部46B,向資源管理部46B請求保留用作其自身模塊的緩沖器40A的內存區(在存儲圖像數據時使用的單位緩沖區)。這樣,由于先前描述的由資源管理部46B執行的步驟104至步驟114(見圖2B)的處理,保留了單位緩沖區。
此外,在構成其自身模塊的緩沖器40A的單位緩沖區之中存在具有空閑空間區域的單位緩沖區的情況下,步驟412中的判斷結果是肯定的,程序繼續進行到步驟416。在步驟416中,以與上述步驟414相同的方式,識別由作為寫入請求源的圖像處理模塊38設置的單位寫入數據量,其后,判斷在該具有空閑空間區域的單位緩沖區中的空閑空間區域的大小是否大于或等于所識別出的單位寫入數據量。如果該判斷結果是肯定的,則不需要新保留用作其自身模塊的緩沖器40A的單位緩沖區,因此,程序繼續進行到步驟422而不執行任何操作。
如果單位緩沖區的大小是單位寫入數據量的整數倍,則每次從其自身模塊的前面的圖像處理模塊38輸入寫入請求時,如上所述,步驟412、414的判斷結果都是否定的或者步驟412、416的判斷結果都是肯定的,并且僅按需要保留用作緩沖器40A的單位緩沖區。
另一方面,在單位緩沖區的大小不是單位寫入數據量的整數倍的情況下,通過重復地將單位寫入數據量的圖像數據寫到緩沖器40A(單位緩沖區),如還在圖9A中作為示例示出的狀態出現,在該狀態中,具有空閑空間區域的單位緩沖區的空閑空間區域的大小小于單位寫入數據量(步驟416的判斷結果是否定的)。此外,在本實施例中,還可采用在其自身模塊設置的單位讀取數據量(或者其最大值)作為單位緩沖區的大小。但是,如果其大小小于單位寫入數據量(即,如果步驟414的判斷結果是肯定的),則當輸入寫入請求時總是出現前述狀態。
如上所述,在具有空閑空間區域的單位緩沖區中的空閑空間區域的大小小于單位寫入數據量的情況下,寫入了單位寫入數據量的圖像數據的區域跨越多個單位緩沖區。但是,在本實施例中,因為以單位緩沖區為單位來保留用作緩沖器40A的內存區,所以不可能確保在不同時間保留的單位緩沖區是在實際內存區(內存14)上連續的區域。因此,在寫入了圖像數據的區域跨越多個單位緩沖區的情況下,即,在步驟416的判斷結果是否定的或者步驟414的判斷結果是肯定的的情況下,程序繼續進行到步驟418。在步驟418中,將單位寫入數據量通知給資源管理部46B作為要保留的內存區的大小,并向資源管理部46B請求保留用于寫入的內存區(用于寫入的緩沖區參照圖9B)。然后,當保留了用于寫入的緩沖區時,在下一步驟420中,執行對用作緩沖器40A的單位緩沖區的保留。
在步驟422中,如果具有空閑空間區域的單位緩沖區中的空閑空間區域的大小大于或等于單位寫入數據量,則使該空閑空間區域成為寫入區。另一方面,如果具有空閑空間區域的單位緩沖區中的空閑空間區域的大小小于單位寫入數據量,則使新保留的用于寫入的緩沖區成為寫入區,將該寫入區的頭地址通知給作為寫入請求源的圖像處理模塊38,并要求該圖像處理模塊38從通知的頭地址起按順序寫入作為寫入的對象的圖像數據。這樣,作為寫入請求源的圖像處理模塊38將圖像數據寫到已通知了其頭地址的寫入區(單位緩沖區或用于寫入的緩沖區)(見圖9B)。如上所述,如果寫入了圖像數據的區域跨越多個單位緩沖區,則分開保留用于寫入的緩沖區。因此,不管寫入了圖像數據的區域是否跨越多個單位緩沖區,僅僅通過如上所述給出寫入區的頭地址的通知就可實現寫入區向作為寫入請求源的圖像處理模塊38的通知,并且與圖像處理模塊38的接口將會簡單。
在下一步驟424中,判斷前面的圖像處理模塊38是否完成了圖像數據向寫入區的寫入,重復步驟424直到判斷結果是肯定的。當前面的圖像處理模塊38給出了寫入完成通知時,步驟424的判斷結果是肯定的,并且程序繼續進行到步驟426。在步驟426中,判斷上述寫入處理中的寫入區是否是在先前的步驟416中保留的用于寫入的緩沖區。如果該判斷結果是否定的,則程序進行到步驟432而不執行任何處理。如果步驟426的判斷結果是肯定的,則程序進行到步驟428。在步驟428中,如圖9C中作為示例所示出的,復制寫入了用于寫入的緩沖區的圖像數據,狀態為所述圖像數據在具有空閑空間區域的單位緩沖區和在先前的步驟422中保留的新的單位緩沖區之間進行劃分。此外,在步驟430中,將在先前的步驟418中作為用于寫入的緩沖區而保留的內存區的頭地址通知給資源管理部46B,并且請求資源管理部46B釋放該內存區。
這里,給出對這樣的實施例的解釋,在該實施例中,當需要時保留用于寫入的緩沖區,當不再需要時立刻釋放該用于寫入的緩沖區。但是,在用于存儲的單位緩沖區的大小不是單位寫入數據量的整數倍時,用于寫入的緩沖區是絕對必要的。因此,可以使用這樣的結構,其中,在初始化時保留該結構,在刪除緩沖器模塊40時釋放該結構。
當圖像處理模塊38和緩沖器模塊40請求釋放內存區時,資源管理部46B執行與選擇設置的內存管理方法相對應的釋放存儲器的處理。例如,如果內存管理方法是第三管理方法,則執行圖2C的針對內存釋放請求的處理,并執行內存區的釋放。
在數據寫入處理(圖8)中,當步驟426中的判斷結果為否定的時候,或者當在步驟430中請求釋放存儲器之后資源管理部46B給出了釋放完成通知時,程序繼續進行到步驟432。在步驟432中,在與其自身模塊的單獨的后面的圖像處理模塊38相對應的有效數據指針之中,分別更新表示有效數據的末端位置的指針(參照圖9C)。通過將由指針指示的有效數據的末端位置向后移動對應于單位寫入數據量的量來實現指針的更新。在由其自身模塊的前面的圖像處理模塊38此次寫入的圖像數據是與作為處理對象的圖像數據的末端相對應的數據的情況下,當由前面的圖像處理模塊38進行的寫入處理完成時,給出整個處理結束通知,該通知表示作為處理對象的圖像數據已結束,并且從前面的圖像處理模塊38輸入寫入的圖像數據的大小。
因此,在當寫入處理完成時從前面的圖像處理模塊38輸入整個處理結束通知的情況下,通過將有效數據的末端位置向后移動與同時通知的大小相對應的量來執行指針更新。
在下一步驟434中,基于在完成寫入處理時是否輸入了整個處理結束通知,判斷作為處理對象的圖像數據到緩沖器40A的寫入是否完成。如果該判斷結果是否定的,則程序繼續進行到步驟438而不執行任何處理。但是,如果該判斷是肯定的,則程序進行到步驟436,在步驟436中,將數據最終位置信息(其表示這是作為處理對象的圖像數據的末端)添加到在步驟432中更新的指針(在與其自身模塊的單獨的后面的圖像處理模塊38相對應的有效指針之中,該指針示出了有效數據的末端位置)。其后,程序進行到步驟438。然后,在步驟438中,將等待請求的數量減1,數據寫入處理結束,程序返回到緩沖器控制處理(圖6)的步驟378。
在緩沖器控制處理(圖6)中,在與步驟382中取出的請求信息相對應的請求類型是讀取的情況下,程序從步驟384進行到步驟388,執行圖10所示的數據讀取處理。在數據讀取處理中,首先,在步驟450中,基于從隊列取出的請求信息中包括的請求源識別信息,識別作為讀取請求源的圖像處理模塊38,并識別由作為讀取請求源的圖像處理模塊38設置的單位讀取數據量。基于與作為讀取請求源的圖像處理模塊38相對應的有效數據指針,識別與作為讀取請求源的圖像處理模塊38相對應的有效數據在緩沖器40A上的頭位置和末端位置。
在下一步驟452中,基于在步驟450中識別的有效數據的頭位置和末端位置,判斷與作為讀取請求源的圖像處理模塊38相對應的有效數據(可由作為讀取請求源的圖像處理模塊38讀取的圖像數據)是否大于或等于單位讀取數據量。
如果該判斷結果是否定的,則程序繼續進行到步驟454,在步驟454中,判斷有效數據的末端是否是作為處理對象的圖像數據的末端,其中,有效數據存儲在緩沖器40A中,并且可被作為讀取請求源的圖像處理模塊38讀取。
步驟452或步驟454中的判斷結果是肯定的,在此情況下程序進行到步驟456。這樣的情況的一個示例是與作為讀取請求源的圖像處理模塊38相對應的有效數據存儲在緩沖器40A中,所述有效數據的量大于或等于單位讀取數據量。這樣的情況的另一示例是雖然存儲在緩沖器40A中并與作為讀取請求源的圖像處理模塊38相對應的有效數據小于單位讀取數據量,但是該有效數據的末端是作為處理對象的圖像數據的末端。在步驟456中,基于在先前的步驟450中識別的有效數據的頭位置,識別單位緩沖區(該單位緩沖區存儲有效數據的頭部的圖像數據)。此外,通過判斷識別出的單位緩沖區中存儲的有效數據的數據量是否大于或等于在步驟450中識別的單位讀取數據量,來判斷作為此次讀取對象的有效數據是否跨越多個單位緩沖區。
如果步驟456的判斷結果是否定的,則程序進行到步驟462而不執行任何處理。這里,如圖11A所示,例如,在存儲有效數據的頭部圖像數據的單位緩沖區中存儲的有效數據的數據量小于單位讀取數據量并且作為此次讀取對象的有效數據跨越多個單位緩沖區的情況不限于作為此次讀取對象的有效數據被存儲在實際存儲器(內存14)上連續的區域中。因此,如果步驟456中的判斷結果是肯定的,則程序繼續進行到步驟460,在步驟460中,將與作為讀取請求源的圖像處理模塊38相對應的單位讀取數據量通知給資源管理部46B作為要保留的內存區的大小,并且向資源管理部46B請求保留在讀取中使用的內存區(用于讀取的緩沖區,見圖11B)。當保留了用于讀取的緩沖區時,在下一步驟460中,將作為讀取對象并且存儲在多個單位緩沖區上的有效數據復制到在步驟458中保留的用于讀取的緩沖區(還參照圖11B)。
在步驟462中,如果將作為讀取對象的有效數據存儲在單個單位緩沖區中,則使得該單位緩沖區之中的存儲有作為讀取對象的有效數據的區域成為讀取區域。另一方面,如果作為讀取對象有效數據存儲在多個單位緩沖區上,則將用于讀取的緩沖區用作讀取區,將該讀取區的頭地址通知給作為讀取請求源的圖像處理模塊38,并且要求該圖像處理模塊38從通知的頭地址起按順序讀取圖像數據。這樣,作為讀取請求源的圖像處理模塊38執行從已通知了其頭地址的讀取區(單位緩沖區或用于讀取的緩沖區)讀取圖像數據(還見圖11C)。在作為讀取對象的有效數據是與作為處理對象的圖像數據的末端相對應的數據的情況下(即,在作為讀取對象的有效數據的末端位置與由有效數據指針所指示的有效數據的末端位置重合的情況下(所述有效數據指針與作為讀取請求源的圖像處理模塊38相對應,并且數據最終位置信息被加到該指針)),還將作為讀取對象的有效數據的大小以及這是作為處理對象的圖像數據的末端這一事實通知給作為讀取請求源的圖像處理模塊38。
如上所述,在作為讀取對象的有效數據被存儲為跨越多個單位緩沖區的情況下,將作為讀取對象的有效數據復制到分開保留的用于讀取的緩沖區。因此,不管作為讀取對象的有效數據是否存儲在多個單位緩沖區上,僅僅通過如上所述地給出讀取區域的頭地址的通知就可實現讀取區域向作為讀取請求源的圖像處理模塊38的通知,并且與圖像處理模塊38的接口將會簡單。在其自身模塊是由應用32生成的緩沖器模塊40的情況下,用作緩沖器40A的內存區(單位緩沖區的集合)是連續區域。因此,以下是可能的在執行步驟456的判斷之前,判斷緩沖器標識是否為1,如果判斷結果是肯定的,則不管作為讀取對象的有效數據是否存儲在多個單位緩沖區上,程序都繼續進行到步驟462。
在下一步驟464中,判斷作為讀取請求源的圖像處理模塊38是否完成了圖像數據從讀取區中的讀取,重復步驟464直到該判斷結果成為肯定的。當作為讀取請求源的圖像處理模塊38通知了讀取完成時,步驟464的判斷結果是肯定的,程序進行到步驟466,在步驟466中,判斷上述讀取處理中的讀取區是否是在先前的步驟458中保留的用于讀取的緩沖區。如果該判斷結果是否定的,則程序繼續進行到步驟470而不執行任何處理。如果步驟466中的判斷是肯定的,則程序繼續進行到步驟468,在步驟468中,將在先前的步驟458中作為用于讀取的緩沖區保留的內存區的大小和頭地址通知給資源管理部46B,并向資源管理部46B請求釋放該內存區。同樣,對于用于讀取的緩沖區,與用于寫入的緩沖區方式相同,如果用于存儲的單位緩沖區的大小不是單位讀取數據量的整數倍,則用于讀取的緩沖區是絕對必要的。因此,可以使用這樣的結構,其中,在初始化時保留該結構,在刪除緩沖器模塊40時釋放該結構。
在下一步驟470中,在與作為讀取請求源的圖像處理模塊38相對應的有效數據指針之中,更新指示有效數據的頭位置的指針(還參照圖11C)。通過將由指針指示的有效數據的頭位置向后移動對應于單位讀取數據量的量可實現指針的更新。如果作為此次讀取對象的有效數據是與作為處理對象的圖像數據的末端相對應的數據,則通過將有效數據的頭位置向后移動與作為此次讀取對象的有效數據的大小(所述大小也被通知給作為讀取請求源的圖像處理模塊38)相對應的量來執行指針更新。
在步驟472中,分別參照對應于單獨的后面的圖像處理模塊38的有效數據指針,判斷由于步驟470的指針更新,在構成緩沖器40A的單位緩沖區之中是否出現了各自的后面的圖像處理模塊38已全部完成了對其存儲的圖像數據的讀取的單位緩沖區,即,是否出現了其中沒有存儲有效數據的單位緩沖區。如果該判斷結果是否定的,則程序進行到步驟478而不執行任何處理。如果該判斷結果是肯定的,則程序進行到步驟474,在步驟474中,判斷緩沖器標志是否為1。如果其自身模塊是由模塊生成部44生成的緩沖器模塊40,則判斷結果是否定的并且程序進行到步驟476,在步驟476中,向資源管理部46B請求釋放其中沒有存儲有效數據的單位緩沖區。
如果其自身模塊是由應用32生成的緩沖器模塊40,則步驟474中的判斷結果是肯定的,并且程序繼續進行到步驟478而不執行任何處理。因此,如果將由用戶指定的緩沖區(內存區)用作緩沖器40A,則存儲該緩沖區不釋放。然后,在步驟478中,將等待請求的數量減1,數據讀取處理結束,程序返回到緩沖器控制處理(圖6)的步驟378。
另一方面,在存儲在緩沖器40A中并且可被作為讀取請求源的圖像處理模塊38讀取的有效數據的數據量小于單位讀取數據量,并且可讀取的有效數據的末端不是作為處理對象的圖像數據的末端的情況下(即,在圖15B的(4)中檢測到沒有可讀的有效數據的情況下),步驟452和454的判斷結果都是否定的,程序繼續進行到步驟480。在步驟480中,將請求新的圖像數據的數據請求輸出到工作流管理部46A(還見圖15B中的(5))。在此情況下,工作流管理部46A將處理請求輸入到其自身模塊的前面的圖像處理模塊38。此外,在步驟482中,將在先前的步驟382(見圖6)中從隊列中取出的請求信息再次登記在原始隊列的末端,并且數據讀取處理結束。
如圖6所示,當數據讀取處理結束時,程序返回到步驟378。在此情況下,如果在隊列中沒有登記其它的請求信息,則在隊列的末端再次登記的請求信息被從隊列中立即再次取出,并且再次執行圖10的數據讀取處理。如果在隊列中登記有其它請求信息,則取出該其它請求信息并執行與其對應的處理,其后,從隊列中再次取出在隊列的末端再次登記的請求信息并且再次執行圖10的數據讀取處理。因此,在輸入了來自后面的圖像處理模塊38的讀取請求但是可由作為讀取請求源的圖像處理模塊38讀取的有效數據的數據量小于單位讀取數據量并且可讀取的有效數據的末端不是作為處理對象的圖像數據的末端的情況下,存儲相應的請求信息,重復地執行數據讀取處理,直到可讀取的有效數據的數據量變得大于或等于單位讀取數據量或者可讀取的有效數據的末端就是作為處理對象的圖像數據的末端(即,直到步驟452或步驟454的判斷結果成為肯定的)。
盡管將在后面描述其細節,但是當從緩沖器模塊40輸入了數據請求時,工作流管理部46A將處理請求輸入到作為數據請求源的緩沖器模塊40的前面的圖像處理模塊38(還參照圖15B中的(6))。由于由該處理請求的輸入觸發、并在前面的圖像處理模塊38的控制部38B執行的處理,所以當前面的圖像處理模塊38變得能夠將圖像數據寫到緩沖器模塊40時,由于從前面的圖像處理模塊38輸入了寫入請求,所以執行上述數據寫入操作(圖8),并且從前面的圖像處理模塊38將圖像數據寫到緩沖器模塊40的緩沖器40A(還參照圖15B的(7)、(8))。這樣,后面的圖像處理模塊38執行圖像數據從緩沖器40A中的讀取(還參照圖15B的(9))。
如上所述,在與本實施例相關的緩沖器控制處理中,每次從前面的圖像處理模塊38輸入寫入請求或者從后面的圖像處理模塊38輸入讀取請求時,將輸入的請求登記在隊列中作為請求信息,并從隊列中逐個取出請求信息進行處理。因此,即使諸如在執行數據寫入處理期間輸入了讀取請求或者在執行數據讀取處理期間輸入了寫入請求的情況下,執行停止對應于輸入的請求的處理的執行的獨占控制,直到正在執行的處理完成并且出現了可執行對應于輸入的請求的處理的狀態為止。這樣,即使計算機10的CPU 12并行地執行與構成圖像處理部50的單獨的模塊相對應的進程或線程,仍可避免由于將多個請求同時或者基本上同時輸入到單個緩沖器模塊40而出現的問題。因此,計算機10的CPU 12可以并行執行對應于單獨的模塊的進程或線程。當然,可將緩沖器模塊實現為通常的程序或對象。
接下來,將給出對圖像處理模塊控制處理(圖13)的描述,每次從工作流管理部46A將處理請求輸入到構成圖像處理部50的單獨的圖像處理模塊38時,單獨的圖像處理模塊38的各個控制部38B執行該圖像處理模塊控制處理。在圖像處理模塊控制處理中,首先,在步驟284中,在存在其自身模塊的前面的模塊(緩沖器模塊40、或者圖像數據供應部22、圖像處理模塊38等)的情況下,從該前面的模塊請求數據(圖像數據或者諸如分析之類的圖像處理的處理結果)。在下一步驟286中,判斷是否可從前面的模塊獲得數據。如果判斷結果是否定的,則在步驟288中,判斷是否已給出整個處理結束的通知。如果步驟288的判斷結果是否定的,則程序返回到步驟286,重復步驟286和288,直到可以從前面的模塊獲得數據。如果步驟286中的判斷結果是肯定的,則在步驟290中,執行數據獲取處理,該處理從前面的模塊獲取數據。
這里,當其自身模塊的前面的模塊是緩沖器模塊40時,如果存在這樣的狀態可讀取的有效數據存儲在緩沖器模塊40的緩沖器40A中,該有效數據的量大于或等于單位讀取數據量;或者可讀取的該有效數據的末端與作為處理對象的圖像數據的末端重合,則當在先前的步驟284中請求數據(讀取請求)時,立即從該緩沖器模塊40通知讀取區的頭地址,并且請求讀取數據(見圖10的步驟462)。如果這些狀態都不存在,則緩沖器模塊40的前面的圖像處理模塊38將圖像數據寫到該緩沖器模塊40的緩沖器40A時,狀態改變到前述狀態,其后,從緩沖器模塊40通知讀取區的頭地址,并且請求讀取數據(見圖10的步驟462)。這樣,步驟286的判斷結果是肯定的,程序進行到步驟290。在步驟290中,執行數據獲取處理,該處理從前面的緩沖器模塊40已通知了其頭地址的讀取區中讀取單位讀取數據量(或比之少的數據量)的圖像數據(參照圖15A中的(3))。
此外,如果其自身模塊的前面的模塊是圖像數據供應部22,則當在先前的步驟284中輸出數據請求時,立即從前一級的圖像數據供應部22發出通知存在可獲得圖像數據的狀態。這樣,步驟286的判斷結果是肯定的,程序繼續進行到步驟290,在步驟290中,執行圖像數據獲取處理,該處理從前一級的圖像數據供應部22中獲得單位讀取數據量的圖像數據。此外,如果其自身模塊的前面的模塊是圖像處理模塊38,則在先前的步驟284中輸出數據請求(處理請求)時,如果存在前面的圖像處理模塊38可執行圖像處理的狀態,則由于輸入了寫入請求,所以給出了存在可獲得數據(圖像處理的結果)的狀態的通知。因此,步驟286的判斷結果是肯定的,程序進行到步驟290。由于前面的圖像處理模塊38給出了其中要寫入數據的緩沖區的地址的通知并請求寫入,所以執行數據獲取處理,該數據獲取處理將從前面的圖像處理模塊38輸出的數據寫到該緩沖區。
在下一步驟292中,控制部38B判斷在其自身模塊的前一級是否連接有多個模塊。如果判斷結果是否定的,則程序繼續進行到步驟296而不執行任何處理。如果判斷結果是肯定的,則程序繼續進行到步驟294,在步驟294中,判斷是否已從所有前面的模塊獲得了數據。如果步驟294中的判斷結果是否定的,則程序返回到步驟284,重復步驟284至步驟294,直到步驟294的判斷結果成為肯定的。當收集到從前面的模塊獲得的所有數據時,步驟292的判斷結果是否定的,或者步驟294的判斷結果是肯定的,程序繼續進行到步驟296。
接下來,在步驟296中,控制部38B向其自身模塊的后面的模塊請求用于數據輸出的區域。在步驟298中,重復進行判斷直到可獲得數據輸出區(即,直到通知了數據輸出區的頭地址)。應該注意,如果后面的模塊是緩沖器模塊40,則通過將寫入請求輸出到該緩沖器模塊40來形成前述的對用于數據輸出的區域的請求。當可獲得數據輸出區(如果后面的模塊是緩沖器模塊40,則為從該緩沖器模塊40通知了其頭地址的寫入區)時(參照圖15A中的(4)),在下一步驟300中,將由先前的數據獲取處理獲得的數據以及從后面的模塊獲得的數據輸出區(的頭地址)輸入到圖像處理引擎38A。對輸入的數據執行預定的圖像處理(見圖15A的(5)),將處理后的數據寫到數據輸出區(見圖15A的(6))。當完成了單位讀取數據量的數據到圖像處理引擎38A的輸入并且將從圖像處理引擎38A輸出的數據都寫到數據輸出區時,在下一步驟302中,將輸出已完成通知給后面的模塊。
由于上述步驟284至步驟302,完成了在圖像處理模塊38處對單位處理數據量的數據的處理(即,單位處理)。存在這樣的情況在從工作流管理部46A輸入到圖像處理模塊38的處理請求中,由工作流管理部46A指定單位處理的執行次數。因此,在步驟304中,判斷單位處理的執行次數是否已達到由輸入的處理請求指示的執行次數。如果指示的單位處理的執行次數是一次,則該判斷結果無條件地是肯定的。但是,如果指示的單位處理的執行次數大于或等于2,則程序返回到步驟284,重復步驟284至步驟304直到步驟304的判斷結果成為肯定的。當步驟304的判斷結果是肯定的時候,程序進行到步驟306。在步驟306中,通過將處理完成通知輸出到工作流管理部46A,控制部38B通知工作流管理部46A對應于輸入的處理請求的處理已完成,并且圖像處理模塊控制處理結束。
此外,當由于每次從工作流管理部46A輸入處理請求時重復上述處理從而執行處理直到作為處理對象的圖像數據的末端時,由于從前面的模塊給出了作為處理對象的圖像數據的末端的通知,所以步驟288的判斷結果成為肯定的,程序繼續進行到步驟308。在步驟308中,控制部38B將整個處理完成通知輸出到工作流管理部46A和后面的模塊,該通知意味著作為處理對象的圖像數據的處理完成。在下一步驟310中,執行自身模塊刪除處理(后面會描述),圖像處理模塊控制處理結束。
應該注意,執行圖像分析處理(諸如斜交角檢測處理等)的圖像處理引擎38A通常被構造為圖像處理結果不是以單位讀取數據量為單位進行輸出,而是在作為處理對象的所有圖像數據都已輸入之后才輸出圖像處理結果。在具有這樣的圖像處理引擎38A的圖像處理模塊38的控制部38B中,不執行圖像處理模塊控制處理(圖13)的步驟296和298并且不執行步驟300中的數據向后面的模塊的輸出,當由于作為處理對象的圖像數據被處理直到末端從而步驟288中的判斷結果為肯定時,將從圖像處理引擎38A輸出的數據(圖像處理結果)輸出到其自身模塊的外部(工作流管理部46A和應用32)。然后,如果存在需要上述圖像處理結果的另一圖像處理模塊38(例如,基于斜交角檢測處理的結果執行圖像旋轉處理的圖像處理模塊38等),則從工作流管理部46A或應用32將前述圖像處理結果輸入到該圖像處理模塊38。
另一方面,在將塊單位處理指定為圖像處理的執行形式的情況下,當由應用32啟動工作流管理部46A時,執行圖16A所示的塊單位控制處理1。同樣如上所述,在從工作流管理部46A將處理請求輸入到圖像處理部50的單獨的圖像處理模塊38的過程中,可指定單位處理的執行次數。在塊單位控制處理1的步驟500中,對于各單獨的圖像處理模塊38,設置了在一次處理請求中指定的單位處理的執行次數。可以確定每一次處理請求的單位處理的執行次數,從而例如使在作為處理對象的所有圖像數據被處理的時間期間輸入到單獨的圖像處理模塊38的處理請求的次數平均,或者可以根據其他標準來確定。然后,在下一步驟502中,將處理請求輸入到圖像處理部50的最后一級的圖像處理模塊38(還參照圖18的(1)),塊單位控制處理1結束。
這里,在圖18示出的圖像處理部50中,當從工作流管理部46A將處理請求輸入到最后一級的圖像處理模塊384時,圖像處理模塊384的控制部38B將讀取請求輸入到前面的緩沖器模塊403(參照圖18的(2))。此時,在緩沖器模塊403的緩沖器40A中沒有存儲可由圖像處理模塊384讀取的有效數據(圖像數據)。因此,緩沖器模塊403的緩沖器控制部40B將數據請求輸入到工作流管理部46A(參照圖18的(3))。
在圖像處理的執行形式是塊單位處理的情況下,每次從緩沖器模塊40輸入數據請求時,執行圖16B示出的塊單位控制處理2。在該塊單位控制處理2中,在步驟504中,基于在圖4B所示的表中登記的信息,識別作為數據請求的輸入源的緩沖器模塊40(這里是圖像處理模塊403)的前面的圖像處理模塊38(這里是圖像處理模塊383),并將處理請求輸入到識別出的前面的圖像處理模塊38(參照圖18的(4)),處理結束。
當輸入了處理請求時,圖像處理模塊383的控制部38B將讀取請求輸入到前面的緩沖器模塊402(參照圖18的(5))。因為在緩沖器模塊402的緩沖器40A中也沒有存儲可讀取的圖像數據,所以緩沖器模塊402的緩沖器控制部40B將數據請求輸入到工作流管理部46A(參照圖18的(6))。此外,當從緩沖器模塊402輸入了數據請求時,工作流管理部46A再次執行上述塊單位控制處理2,并從而將處理請求輸入到前面的圖像處理模塊382(參照圖18的(7))。圖像處理模塊382的控制部38B將讀取請求輸入到前面的緩沖器模塊401(參照圖18的(8))。此外,因為在緩沖器模塊401的緩沖器40A中也沒有存儲可讀取的圖像數據,所以緩沖器模塊401的緩沖器控制部40B也將數據請求輸入到工作流管理部46A(參照圖18的(9))。此外,當從緩沖器模塊401輸入了數據請求時,工作流管理部46A再次執行上述塊單位控制處理2,并從而將處理請求輸入到前面的圖像處理模塊381(參照圖18的(10))。
這里,圖像處理模塊381的前面的模塊是圖像數據供應部22。因此,通過將數據請求輸入到圖像數據供應部22,圖像處理模塊381的控制部38B從圖像數據供應部22獲得單位讀取數據量的圖像數據(參照圖18的(11))。將由圖像處理引擎38A對獲得的圖像數據執行圖像處理獲得的圖像數據寫到后面的緩沖器模塊401的緩沖器40A(參照圖18的(12))。應該注意,當圖像處理模塊381的控制部38B完成了將圖像數據寫到后面的緩沖器模塊401的緩沖器40A時,控制部38B將處理完成通知輸入到工作流管理部46A。
在圖像處理的執行形式是塊單位處理的情況下,每次從圖像處理模塊38輸入了處理完成通知時,工作流管理部46A都執行圖16C示出的塊單位控制處理3。在該塊單位控制處理3中,在步驟506中,判斷處理完成通知源是否是圖像處理部50的最后一級的圖像處理模塊38。如果在此情況下判斷結果是否定的,則處理結束而不執行任何處理(對于從圖像處理模塊382、383輸入處理完成通知的情況也是這樣)。
此外,當寫入可被后面的圖像處理模塊382讀取并且其量大于或等于單位讀取數據量的有效數據時,緩沖器模塊401的緩沖器控制部40B請求圖像處理模塊382進行讀取。
與此相伴,圖像處理模塊382的控制部38B從緩沖器模塊401的緩沖器40A中讀取單位讀取數據量的圖像數據(參照圖18的(13)),圖像處理引擎38A對獲得的圖像數據執行圖像處理。將以此方式獲得的圖像數據寫到后面的緩沖器模塊402的緩沖器40A(參照圖18的(14))。當寫入可被后面的圖像處理模塊383讀取并且其量大于或等于單位讀取數據量的有效數據時,緩沖器模塊402的緩沖器控制部40B請求圖像處理模塊383讀取。圖像處理模塊383的控制部38B從緩沖器模塊402的緩沖器40A中讀取單位讀取數據量的圖像數據(參照圖18的(15)),圖像處理引擎38A對獲得的圖像數據執行圖像處理。將以此方式獲得的圖像數據寫到后面的緩沖器模塊403的緩沖器40A(參照圖18的(16))。
此外,當寫入可被后面的圖像處理模塊384讀取并且其量大于或等于單位讀取數據量的有效數據時,緩沖器模塊403的緩沖器控制部40B請求圖像處理模塊384讀取。與此相伴,圖像處理模塊384的控制部38B從緩沖器模塊403的緩沖器40A中讀取單位讀取數據量的圖像數據(參照圖18的(17)),圖像處理引擎38A對獲得的圖像數據執行圖像處理。將以此方式獲得的圖像數據輸出到作為后面的模塊的圖像輸出部24(參照圖18的(18))。此外,當圖像處理模塊384的控制部38B完成了圖像數據向圖像輸出部24的寫入時,控制部38B將處理完成通知輸入到工作流管理部46A(參照圖18的(19))。在此情況下,前述塊單位控制處理3的步驟506中的判斷結果是肯定的,程序進行到步驟508,在步驟508中,再次將處理請求輸入到作為最后一級圖像處理模塊38的圖像處理模塊384,其后處理結束。
由于再次輸入到作為最后一級的圖像處理模塊384的處理請求,上述處理序列被再次重復,并且以塊單位的執行形式對作為處理對象的圖像數據連續地執行圖像處理。當從圖像數據供應部22提供的圖像數據到達其末端時,由前面的圖像處理模塊38連續地執行整個處理結束通知從單獨的圖像處理模塊38到工作流管理部46A的輸入。
在圖像處理的執行形式是塊單位處理的情況下,每次從圖像處理模塊38輸入了整個處理結束通知時,工作流管理部46A都執行圖16D示出的塊單位控制處理4。在該塊單位控制處理4中,在步驟510中,判斷作為整個處理結束通知的輸入源的圖像處理模塊38是否是最后一級的圖像處理模塊38。如果該判斷結果是否定的,則處理結束而不執行任何處理。在由于將所有的圖像數據(所述所有的圖像數據是通過對作為處理對象的圖像數據執行必要的圖像處理而獲得的)輸出到圖像輸出部24從而從最后一級的圖像處理模塊38輸入了整個處理結束通知的情況下,步驟510的判斷結果是肯定的,程序繼續進行到步驟512。在步驟512中,通知應用32圖像處理完成(還參照圖3的步驟180),塊單位控制處理結束。然后,已被通知了圖像處理完成的應用32通知用戶圖像處理已完成(還參照圖3的步驟182)。
這樣,在塊單位處理中,將輸入到最后一級的圖像處理模塊38的處理請求回傳到前面的圖像處理模塊38。當處理請求到達最前級的圖像處理模塊38時,執行一系列圖像處理,流程為在最前級的圖像處理模塊38執行圖像處理,將數據寫到后面的緩沖器模塊40,并且如果寫入的數據足夠,則處理繼續進行到后面的模塊。
在將整幅圖像處理指定為圖像處理的執行形式的情況下,當由應用32啟動工作流管理部46A時,執行圖17A示出的整幅圖像控制處理1。在整幅圖像控制處理1中,以與上述塊單位控制處理1(圖16A)相同的方式,針對各單獨的圖像處理模塊38,設置由一次處理請求指定的單位處理的執行次數(步驟540)。在下一步驟542中,將處理請求輸入到圖像處理部50中最后一級的圖像處理模塊38(參照圖18的(1)),并且處理結束。此外,在圖像處理的執行形式是整幅圖像處理的情況下,每次從緩沖器模塊40輸入數據請求時,工作流管理部46A執行圖17B示出的整幅圖像控制處理2。在整幅圖像控制處理2中,以與上述塊單位控制處理2(圖16B)相同的方式,在步驟544中,基于在圖4B所示的表中登記的信息,識別作為數據請求的輸入源的緩沖器模塊40的前面的圖像處理模塊38,將處理請求輸入到識別出的前面的圖像處理模塊38,處理結束。
這樣,即使圖像處理的執行形式是整幅圖像處理,當由應用32啟動時工作流管理部46A執行的處理以及每次從緩沖器模塊40輸入數據請求時工作流管理部46A執行的處理,都與當圖像處理的執行形式是塊單位處理時的處理相同。因此,同樣在整幅圖像處理中,在從工作流管理部46A將處理請求輸入到圖像處理部50的最后一級的圖像處理模塊38之后,如圖18的(2)至(10)所述,從處理請求所輸入至的圖像處理模塊38將數據請求輸入到前面的緩沖器模塊40,并隨著數據請求從該數據請求所輸入至的緩沖器模塊40輸入到工作流管理部46A,從該工作流管理部46A將處理請求輸出到該緩沖器模塊40的前面的圖像處理模塊,從圖像處理部50的最后一級的圖像處理模塊38這樣連續進行到在圖像處理部50的最前級的圖像處理模塊38。
此外,當從工作流管理部46A輸入了處理請求時,圖像處理部50的最前級的圖像處理模塊381從圖像數據供應部22獲得單位讀取數據量的圖像數據(參照圖18的(11))。圖像處理模塊381將通過圖像處理引擎38A對獲得的圖像數據執行圖像處理而獲得的圖像數據寫到后面的緩沖器模塊401的緩沖器40A(參照圖18的(12)),并將處理完成通知輸入到工作流管理部46A。在圖像處理的執行形式是整幅圖像處理的情況下,每次從圖像處理模塊38輸入了處理完成通知時,工作流管理部46A執行圖17C示出的整幅圖像控制處理3。在整幅圖像控制處理3中,在步驟546中,將處理請求再次輸入到作為處理完成通知源的圖像處理模塊38,處理結束。這樣,在整幅圖像控制處理中,在將處理完成通知輸入到工作流管理部46A的特定的圖像處理模塊38完成對作為處理對象的圖像數據的圖像處理之前的時間段期間,每次從該特定的圖像處理模塊38輸入處理完成通知時,僅僅將處理請求重復地輸入到該特定的圖像處理模塊38。
當圖像處理模塊381完成了作為處理對象的圖像數據的圖像處理時,將作為處理對象并且已經在圖像處理模塊381經過了圖像處理的所有圖像數據存儲在緩沖器模塊401的緩沖器40A中,從圖像處理模塊381將整個處理結束通知輸入到工作流管理部46A。在圖像處理的執行形式是整幅圖像處理的情況下,每次從圖像處理模塊38輸入了整個處理結束通知時,工作流管理部46A執行圖17D示出的整幅圖像控制處理4。在該整幅圖像控制處理4中,在步驟548中,判斷整個處理結束通知的源是否是圖像處理部50的最后一級的圖像處理模塊38。如果判斷結果是否定的,則程序繼續進行到步驟550,在步驟550中,基于在圖4B所示的表中登記的信息,識別在作為整個處理結束通知的源的圖像處理模塊38之后的下一圖像處理模塊38,將處理請求輸入到該識別出的下一圖像處理模塊38,處理結束。
這樣,在整幅圖像控制處理中,將輸入到最后一級的圖像處理模塊38的處理請求回傳到前面的圖像處理模塊38,并且在該處理請求到達最前級的圖像處理模塊38之后,僅將處理請求重復地輸入最前級的圖像處理模塊38。當在該圖像處理模塊38處對作為處理對象的所有圖像數據的圖像處理完成時,在下一圖像處理模塊38處執行對作為處理對象的所有圖像數據的圖像處理。由于該處理按照后面的圖像處理模塊38的順序進行,所以執行了一系列圖像處理操作。然后,當由于將所有的圖像數據(所述所有的圖像數據是通過對作為處理對象的圖像數據執行需要的圖像處理而獲得的)輸出到圖像輸出部24從而從最后一級的圖像處理模塊38輸入整個處理結束通知時,整幅圖像控制處理4的步驟548的判斷結果是肯定的,程序繼續進行到步驟552。在步驟552中,通知應用32圖像處理完成(還參照圖3的步驟180),整幅圖像控制處理結束。然后,已被通知圖像處理完成的應用32通知用戶圖像處理完成(還參照圖3的步驟182)。
在圖17示出的整幅圖像控制處理中,在從圖像處理模塊輸入了整個處理結束通知時切換處理請求被重復地輸入至的圖像處理模塊38。但是,本發明不限于此。可使用這樣的結構在從其他圖像處理模塊38輸入了處理結束通知時切換處理請求被重復地輸入至的圖像處理模塊38。
此外,在以上描述中,由工作流管理部46A來執行處理請求向最后一級的圖像處理模塊38的輸入。但是本發明不限于此,工作流管理部46A可擁有位于管線的最后一級或者位于有向無環圖的多個終點上的模塊并且執行處理請求,或者應用32可擁有這些模塊并執行處理請求。或者,如上述圖5B中的示例所示,在模塊生成部44的內部,在將執行斜交角檢測處理的圖像處理模塊和執行圖像旋轉處理的圖像處理模塊組合從而構成傾斜校正處理模塊的情況下,在生成圖像旋轉處理模塊時需要斜交角信息作為處理參數。因此,在傾斜校正模塊生成部的內部,可采用這樣的方法將處理請求重復地施加到斜交角檢測處理模塊,處理整幅圖像,將作為處理結果而獲得的斜交角信息提供給圖像旋轉處理模塊作為處理參數。
接下來,將給出刪除圖像處理模塊38的描述,在已完成對作為處理對象的圖像數據進行的圖像處理之后執行該刪除。在圖像處理模塊控制處理(圖13)的步驟308中,單獨的圖像處理模塊38的控制部38B將整個處理結束通知輸出到工作流管理部46A以及后面的模塊,其后,在步驟310中,執行自身模塊刪除處理。
如圖14所示,在自身模塊刪除處理中,首先,在步驟320中,控制部38B請求資源管理部46B釋放在先前的步驟254(圖12)中保留的內存區。這樣,由于在資源管理部46B處執行的對內存釋放請求的處理(圖2C),所以釋放了該內存區。在下一步驟322中,判斷是否存在其自身模塊通過資源管理部46B而保留的、內存之外的資源。如果判斷結果是否定的,則程序繼續進行到步驟326而不執行任何處理。如果判斷結果是肯定的,則程序繼續進行到步驟324。在步驟324中,控制部38B將其自身模塊的標識信息通知給資源管理部46B,并請求釋放其自身模塊保留的、內存之外的資源。這樣,由于資源管理部46B執行的對資源釋放請求的處理(圖2E),所以釋放了該資源。
在自身模塊刪除處理(圖14)中,如果步驟322中的判斷結果是否定的,則程序進行到步驟326,或者如果在步驟324中向資源管理部46B請求釋放內存之外的資源之后,從資源管理部46B給出了資源釋放完成的通知,則程序繼續進行到步驟326。在步驟326中,控制部38B將刪除通知(用于給出要執行刪除其自身模塊的處理的通知)輸入到其自身模塊的前面的模塊、其自身模塊的后面的模塊以及工作流管理部46A。然后,在步驟328中,執行刪除其自身模塊的處理,圖14的自身模塊刪除處理(即,圖13的步驟310)結束。應該注意,可以通過結束對應于其自身模塊的進程或線程或者刪除該對象來實現其自身模塊的刪除。
在由緩沖器模塊40的緩沖器控制部40B執行的緩沖器控制處理(圖6)中,當從其自身模塊的前一級或后一級的圖像處理模塊38輸入了刪除通知時,步驟380中的判斷結果是肯定的,程序繼續進行到步驟390。在步驟390中,在存儲了作為刪除通知的輸入源的模塊之后,判斷是否從其自身模塊的前一級和后一級的所有模塊輸入了刪除通知。如果判斷結果是否定的,則程序返回到步驟378,同樣如上所述重復步驟378和380。此外,當從其自身模塊的前一級和后一級的所有模塊輸入了刪除通知時,步驟390中的判斷結果是肯定的,程序進行到步驟392。在步驟392中,由于將刪除通知輸入到了工作流管理部46A,所以給出了要執行刪除其自身模塊的處理的通知。然后,在下一步驟394中,執行刪除其自身模塊的處理,緩沖器控制處理(圖6)結束。
最后,將描述在圖像處理部50執行圖像處理時發生錯誤的情況下的處理。當在圖像處理部50執行圖像處理的同時發生錯誤時,處理管理部46的錯誤管理部46C執行由于中斷而引起的圖19中示出的錯誤發生中斷處理。在該錯誤發生中斷處理中,首先,在步驟570中,獲得錯誤信息,諸如發生錯誤的類型以及發生地點等。在本實施例中,存儲器20存儲裝置環境信息,該裝置環境信息表示其中包含有計算機10的裝置的類型和結構等,圖像處理程序組34實現在所述計算機10中。在下一步驟572中,從存儲器20等獲得該裝置環境信息,確定與由獲得的裝置環境信息表示的裝置環境相對應的錯誤通知方法。
例如,如果計算機10是諸如PC之類的獨立的計算機,則提供可一次顯示各種信息的顯示器作為顯示器16。因此,可選擇諸如通過彈出式窗口等將在步驟570中獲得的錯誤信息的所有內容顯示在顯示器16上這樣的錯誤通知方法作為所述錯誤通知方法。此外,例如,如果其中并入了計算機10的裝置是諸如復印機、打印機、傳真機、多功能裝置、掃描儀、照片打印機之類的裝置,則可在顯示器16上一次顯示的信息的量是有限的,但是可提供蜂鳴器等。從而,可以選擇這種通知方法通過鳴響蜂鳴器,給出發生了錯誤的通知,并且在步驟570獲得的錯誤信息之中,只將錯誤的類型顯示在顯示器16上,等等。然后,在步驟574中,通過在步驟572中確定的錯誤通知方法給出發生錯誤的通知,錯誤發生中斷處理結束。
這樣,在與本實施例相關的錯誤發生中斷處理中,從多種類型的錯誤通知方法之中選擇與裝置環境相對應的錯誤通知方法,通過該選擇的錯誤通知方法給出發生了錯誤的通知。因此,通過在各種結構的計算機10中實現與本發明相關的圖像處理程序組34,可應用本發明,提高了本發明的適用性。此外,無需根據其中實現有圖像處理程序組34的計算機10的結構(即,根據其是獨立的計算機還是在各種類型的裝置中的任一裝置中實現的計算機等)而執行設置改變操作,諸如在錯誤發生之類時切換處理。因此,減輕了用于實現的操作的負擔。
這里,雖然以中斷處理為前提解釋了錯誤處理,但是錯誤處理不限于中斷處理。例如,可使用以下結構當錯誤發生時,該模塊將錯誤信息和通知給錯誤管理部46C,并且返回狀態碼,該狀態碼表示對于其后的處理指令不能執行處理。接收到該信息的處理管理部46將該信息返回給應用32。應用32從處理管理部46的錯誤管理部46C接收到錯誤信息,并且基于該錯誤信息,應用32自己執行諸如顯示或蜂鳴之類的處理。
以上已給出對示例的描述,在該示例中,是從后面的圖像處理模塊38將讀取請求輸入到緩沖器模塊40的。在可被作為讀取請求源的圖像處理模塊38讀取的有效數據的數據量小于單位讀取數據量并且可讀取的有效數據的末端不是作為處理對象的圖像數據的末端的情況下,從緩沖器模塊40重復地將數據請求輸入到工作流管理部46A,直到可讀取的有效數據的數據量大于或等于單位讀取數據量或者檢測到可讀取的有效數據的末端就是作為處理對象的圖像數據的末端為止。但是,本發明不限于此。在上述情況下,緩沖器模塊40可僅將數據請求輸入到工作流管理部46A一次,并且當可讀取的有效數據的數據量變得大于或等于單位讀取數據量時,或者當檢測到可讀取的有效數據的末端就是作為處理對象的圖像數據的末端時,緩沖器模塊40可將積累完成通知輸入到工作流管理部46A。因而,在從緩沖器模塊40輸入了數據請求后直到輸入了積累完成通知為止的時間段期間,工作流管理部46A可將處理請求重復地輸入到該緩沖器模塊40的前面的圖像處理模塊38。
此外,以上作為示例描述了一個實施例,在該實施例中,在從后面的圖像處理模塊38輸入了讀取請求并且沒有將可被作為讀取請求源的圖像處理模塊38讀取的有效數據存儲在其自身模塊的緩沖器40A中的情況下,緩沖器控制部40B將數據請求輸入到工作流管理部46A。但是,本發明不限于此,在上述情況下,緩沖控制部40B可直接將數據請求輸入到前面的圖像處理模塊38。在該實施例中,在圖像處理的執行形式是塊單位處理的情況下的處理序列在圖20中示出。從圖20中還可清楚看出,在該實施例中,工作流管理部46A將處理請求僅僅輸入到圖像處理部50中最后一級的圖像處理模塊38就足夠了,因而,在工作流管理部46A的處理是簡單的。
此外,上面描述了一個實施例作為塊單位的圖像處理的示例,在該實施例中,首先,工作流管理部46A將處理請求輸入到最后一級的圖像處理模塊38,并且該處理請求作為數據請求或處理請求被依次傳送到前面的模塊。但是,本發明不限于此。還可將處理請求或數據請求從前面的模塊連續地傳送到后面的模塊,并且執行以塊為單位的圖像處理。例如,這可如下實現。將緩沖器模塊40的緩沖器控制部40B構成為每次其自身模塊的前面的圖像處理模塊38將圖像數據寫到緩沖器40A時,如果可被后面的圖像處理模塊38讀取的有效數據的數據量小于單位讀取數據量并且可讀取的有效數據的末端不是作為處理對象的圖像數據的末端,則緩沖器控制部40B將數據請求輸入到工作流管理部46A。另一方面,當可讀取的有效數據的數據量大于或等于單位讀取數據量時,或者當檢測到可讀取的有效數據的末端是作為處理對象的圖像數據的末端時,緩沖器控制部40B將積累完成通知輸入到工作流管理部46A。而且,將工作流管理部46A構成為在將處理請求輸入到圖像處理部50的最后一級的圖像處理模塊38之后,每次從任意緩沖器模塊40輸入數據請求時,工作流管理部46A將處理請求輸入到作為數據請求源的緩沖器模塊40的前面的圖像處理模塊38。每次從任意緩沖器模塊40輸入了積累完成通知時,工作流管理部46A將處理請求輸入到該緩沖器模塊40的后面的圖像處理模塊38。此外,在上文中,可將來自緩沖器模塊40的數據請求作為處理請求直接輸入到該緩沖器模塊40的前面的圖像處理模塊38,并且可將來自緩沖器模塊40的積累完成通知作為處理請求直接輸入到該緩沖器模塊40的后面的圖像處理模塊38。
而且,上面描述了一個實施例,在該實施例中,對于緩沖器模塊40,由前面的圖像處理模塊38預先設置單位寫入數據量,并且由后面的圖像處理模塊38預先設置單位讀取數據量。但是,本發明不限于此。每次將數據寫到緩沖器模塊40或者從緩沖器模塊40讀取數據時,可由圖像處理模塊38通知寫入或者讀取的數據量。
在以上結構中,每次將寫入請求或讀取請求輸入到緩沖器模塊40時,將輸入的請求作為請求信息登記在隊列中,從隊列中逐個取出請求信息并進行處理。這樣,實現了獨占控制,其中,在輸入寫入請求時,如果正在執行從緩沖器40A中讀取數據,則在該數據讀取完成之后,執行對應于該寫入請求的數據寫入處理,并且在輸入讀取請求時,如果正在執行向緩沖器40A寫入數據,則在數據寫入完成之后,執行對應于該讀取請求的數據讀取處理。但是,本發明不限于此。例如,可執行將單位緩沖區作為單位的獨占控制。即,在輸入寫入請求時,如果正在針對緩沖器40A內的、該寫入請求中的寫入對象的單位緩沖區執行對數據的讀取,則在該數據讀取完成之后,執行對應于該寫入請求的數據寫入處理。此外,在輸入讀取請求時,如果正在針對緩沖器40A內的、該讀取請求中的讀取對象的單位緩沖區執行數據寫入,則在該數據寫入完成之后,執行對應于該讀取請求的數據讀取處理。通過例如在各單獨的單位緩沖區提供隊列并執行獨占控制等可實現將單位緩沖區作為單獨的獨占控制。
此外,上面描述了一個示例,其中,在其程序被登記在模塊庫36中的單獨的圖像處理模塊38之中,對應于單位讀取數據量和單位寫入數據量相同的圖像處理模塊38的控制部38B的程序是通用的。但是,本發明不限于此。例如,可將對應于控制部38B的程序分為對應于第一控制部的程序,該第一控制部從前面的模塊獲得圖像數據并將其輸入到圖像處理引擎38A;對應于第二控制部的程序,該第二控制部將從圖像處理引擎38A輸出的數據輸出到后面的模塊;以及對應于公共控制部的程序,該公共控制部執行不依賴于單位讀取數據量、單位處理數據量或單位寫入數據量的控制(例如,與工作流管理部46A進行通信等)。在所有的圖像處理模塊,對應于公共控制部的程序可通用。單位讀取數據量相同的圖像處理模塊38可通用對應于第一控制部的程序。單位寫入數據量相同的圖像處理模塊38可通用對應于第二控制部的程序。
因為構成圖像處理部50的單獨的模塊的實例是程序,所以圖像處理部50的圖像處理實際上是通過CPU 12實現的。這里,可使用以下系統(所謂的輪叫(round robin)系統)將與構成圖像處理部50的單獨的圖像處理模塊38相對應的程序作為進程、線程或對象登記在隊列中,所述進程、線程或對象是CPU 12的執行對象。每次CPU 12從該隊列中取出登記在該隊列中并且對應于特定的圖像處理模塊的程序時,判斷是否可從該特定的圖像處理模塊38的前面的模塊獲得單位處理數據量的圖像數據。僅在判斷出可獲得單位處理數據量的圖像數據的情況下,從該特定的圖像處理模塊38的前面的模塊獲得單位處理數據量的圖像數據。對所獲得的單位處理數據量的圖像數據執行預定的圖像處理(與特定的圖像處理模塊38的圖像處理引擎38A相對應的處理)。執行將經過了預定的圖像處理的圖像數據或預定的圖像處理的處理結果輸出到其自身模塊的后面的模塊的處理。其后,如果沒有完成對作為處理對象的整幅圖像的處理,則將取出的對應于特定的圖像處理模塊的程序作為執行對象的進程、線程或對象再次登記在該隊列中。由于CPU 12重復這些單位圖像處理,所以圖像處理部50處理作為處理對象的整幅圖像。
權利要求
1.一種圖像處理設備,其包括圖像處理部,該圖像處理部具有(A)一個或更多個圖像處理模塊,每一個圖像處理模塊都具有(1)圖像處理引擎,其以預先設定的單位處理數據量為單位對圖像數據進行預定的圖像處理;以及(2)控制部,其以所述圖像處理引擎以所述單位處理數據量為單位進行處理所需的數據量單位,來輸入從其自身模塊的前級獲取的圖像數據,并將由所述圖像處理引擎進行了預定圖像處理的圖像數據,或者該預定圖像處理的處理結果輸出給其自身模塊的后級,所述一個或更多個圖像處理模塊是從多種類型的圖像處理模塊中選擇的,在該多種類型的圖像處理模塊中由所述圖像處理引擎執行的圖像處理的類型或內容彼此不同;以及(B)一個或更多個緩沖器模塊,其具有用于存儲圖像數據的緩沖器,所述圖像處理部由以管線形式或有向無環圖形式連接的多個單獨模塊構成,從而所述緩沖器模塊連接在被選擇的各個圖像處理模塊的前級和后級中的至少一個上;并且所述緩沖器模塊具有緩沖器控制部,其中,該緩沖器控制部在其自身模塊的后級連接有圖像處理模塊的情況下,對連接在其自身模塊的后級的圖像處理模塊的數量進行識別,針對所述后級的各個圖像處理模塊,對存儲在所述緩沖器中的圖像數據當中的未讀取圖像數據的頭位置進行存儲,以及在每一次從其自身模塊的后級的任意圖像處理模塊請求圖像數據時,都執行下述的處理,即,使得作為讀取請求源的各個圖像處理模塊以在其自身模塊的后級的各個單獨的圖像處理模塊處對其自身模塊預先設定的讀取數據量或者在每一次請求圖像數據時指定的讀取數據量,從與作為讀取請求源的所述圖像處理模塊相對應的頭位置讀取存儲在所述緩沖器中的圖像數據。
2.根據權利要求1所述的圖像處理設備,其中,所述單位處理數據量是根據操作環境或所述圖像處理引擎所執行的預定圖像處理的類型而預先設定的。
3.根據權利要求1所述的圖像處理設備,其中,在其自身模塊的前級連接有圖像處理模塊的情況下,所述緩沖器控制部執行下述的處理,即,使得從所述前級圖像處理模塊輸出的圖像數據被寫入所述緩沖器上的存儲區域中,所述緩沖器上的所述存儲區域能夠存儲由所述前級圖像處理模塊對其自身模塊預先設定的寫入數據量或者在每一次輸出圖像數據時通知的寫入數據量的數據。
4.根據權利要求3所述的圖像處理設備,其中,在其自身模塊的后級連接有所述緩沖器模塊的情況下,所述圖像處理模塊的控制部將通過所述圖像處理引擎對所述單位處理數據量的圖像數據執行所述預定圖像處理而獲得的圖像數據的數據量預先設定為所述后級的緩沖器模塊處的寫入數據量,此后,所述圖像處理模塊的所述控制部執行下述的處理,即,在每一次由于所述圖像處理引擎執行所述圖像處理而獲取了所設定的寫入數據量的圖像數據時,將所述寫入數據量的圖像數據寫入所述緩沖器上的存儲區域中。
5.根據權利要求1所述的圖像處理設備,其中,在其自身模塊的前級連接有所述緩沖器模塊的情況下,所述圖像處理模塊的所述控制部將所述單位處理數據量預先設定為所述前級緩沖器模塊處的讀取數據量。
6.根據權利要求1所述的圖像處理設備,還包括構造部,其根據作為處理對象的圖像的屬性和指定要執行的圖像處理的類型的處理參數來構造所述圖像處理部,所述構造部將連接在包括在所構造的圖像處理部中的各個緩沖器模塊的后級的圖像處理模塊的數量通知給各個緩沖器模塊,其中,根據來自所述構造部的通知,所述緩沖器模塊的所述緩沖器控制部對連接在其自身模塊的后級的所述圖像處理模塊的數量進行識別。
7.根據權利要求1所述的圖像處理設備,其中所述緩沖器是由所述緩沖器模塊從設置在所述圖像處理設備處的存儲器中以給定大小為單位保留的多個存儲區域的集合,并且每當需要用于存儲圖像數據的新存儲區域時,所述緩沖器模塊的所述緩沖器控制部就從所述存儲器中保留給定大小的存儲區域,并且在其自身模塊的后級連接有圖像處理模塊的情況下,所述緩沖器控制部釋放其中所存儲的圖像數據已被所有的后級圖像處理模塊進行了讀取的存儲區域。
8.根據權利要求1所述的圖像處理設備,還包括處理管理部,其通過在所述圖像處理部的各個圖像處理模塊處使得重復進行下述的單位處理來使所述圖像處理部對作為處理對象的整個圖像進行處理將從其自身模塊的前級獲取的圖像數據輸入給所述圖像處理引擎,并將由所述圖像處理引擎進行了預定圖像處理的圖像數據,或者該預定圖像處理的處理結果輸出給其自身模塊的后級。
9.根據權利要求8所述的圖像處理設備,其中,在被指示執行整個圖像處理的情況下,所述處理管理部按照從所述圖像處理部的最上游圖像處理模塊開始的順序,執行下述的處理,即,使得特定圖像處理模塊重復執行所述單位處理,直到從所述特定圖像處理模塊輸出了與作為處理對象的所述整個圖像相對應的圖像數據為止。
10.一種圖像處理方法,其通過具有圖像處理部的圖像處理設備來執行圖像處理,該圖像處理部具有(A)一個或更多個圖像處理模塊,每一個圖像處理模塊都具有(1)圖像處理引擎,其以預先設定的單位處理數據量為單位對圖像數據進行預定的圖像處理;以及(2)控制部,其以所述圖像處理引擎以所述單位處理數據量為單位進行處理所需的數據量單位,來輸入從其自身模塊的前級獲取的圖像數據,并將由所述圖像處理引擎進行了預定圖像處理的圖像數據,或者該預定圖像處理的處理結果輸出給其自身模塊的后級,所述一個或更多個圖像處理模塊是從多種類型的圖像處理模塊中選擇的,在該多種類型的圖像處理模塊中由所述圖像處理引擎執行的圖像處理的類型或內容彼此不同;以及(B)一個或更多個緩沖器模塊,其具有用于存儲圖像數據的緩沖器,所述圖像處理部由以管線形式或有向無環圖形式連接的多個單獨模塊構成,從而所述緩沖器模塊連接在被選擇的各個圖像處理模塊的前級和后級中的至少一個上,所述方法包括使得所述緩沖器模塊執行以下操作的步驟在其自身模塊的后級連接有圖像處理模塊的情況下,對連接在其自身模塊的后級的圖像處理模塊的數量進行識別,對于所述后級圖像處理模塊中的每一個,對存儲在所述緩沖器中的圖像數據當中的未讀取圖像數據的頭位置進行存儲,以及在每一次從其自身模塊的任意后級圖像處理模塊請求圖像數據時,都執行下述的處理,即,使得作為讀取請求源的圖像處理模塊以在其自身模塊的各個單獨的后級圖像處理模塊處對其自身模塊預先設定的讀取數據量或者在每一次請求圖像數據時指定的讀取數據量,從與作為讀取請求源的所述圖像處理模塊相對應的頭位置讀取存儲在所述緩沖器中的圖像數據。
11.一種計算機可讀存儲介質,其存儲有用于使得計算機用作具有圖像處理部的圖像處理設備的圖像處理程序,該圖像處理部具有(A)一個或更多個圖像處理模塊,每一個圖像處理模塊都具有(1)圖像處理引擎,其以預先設定的單位處理數據量為單位對圖像數據進行預定的圖像處理;以及(2)控制部,其以所述圖像處理引擎以所述單位處理數據量為單位進行處理所需的數據量單位,來輸入從其自身模塊的前級獲取的圖像數據,并將由所述圖像處理引擎進行了預定圖像處理的圖像數據,或者該預定圖像處理的處理結果輸出給其自身模塊的后級,所述一個或更多個圖像處理模塊是從多種類型的圖像處理模塊中選擇的,在該多種類型的圖像處理模塊中由所述圖像處理引擎執行的圖像處理的類型或內容彼此不同;以及(B)一個或更多個緩沖器模塊,其具有用于存儲圖像數據的緩沖器,所述圖像處理部由以管線形式或有向無環圖形式連接的多個單獨模塊構成,從而所述緩沖器模塊連接在被選擇的各個圖像處理模塊的前級和后級中的至少一個上,所述緩沖器模塊具有緩沖器控制部,其中,所述緩沖器控制部在其自身模塊的后級連接有圖像處理模塊的情況下,對連接在其自身模塊的后級的圖像處理模塊數量進行識別,對于所述后級圖像處理模塊中的每一個,對存儲在所述緩沖器中的圖像數據當中的未讀取圖像數據的頭位置進行存儲,以及在每一次從所述級的任意后級圖像處理模塊請求圖像數據時,都執行下述的處理,即,使得作為讀取請求源的圖像處理模塊以在其自身模塊的各個單獨的后級圖像處理模塊處對其自身模塊預先設定的讀取數據量或者在每一次請求圖像數據時指定的讀取數據量,從與作為讀取請求源的所述圖像處理模塊相對應的頭位置讀取存儲在所述緩沖器中的圖像數據。
全文摘要
提供了一種包括圖像處理部的圖像處理設備,該圖像處理部具有一個或更多個圖像處理模塊以及設置有緩沖器的緩沖器模塊。所述緩沖器模塊對連接在其自身模塊的后級的圖像處理模塊的數量進行識別;對于所述后級圖像處理模塊中的每一個,對存儲在所述緩沖器中的圖像數據當中的未讀取圖像數據的頭位置進行存儲;以及在每一次從后級圖像處理模塊請求圖像數據時,都使得所述圖像處理模塊以在各個單獨的后級圖像處理模塊處對其自身模塊預先設定的讀取數據量或者在每一次請求時指定的讀取數據量,從與所述圖像處理模塊相對應的頭位置讀取存儲在所述緩沖器中的圖像數據。
文檔編號G06T1/20GK1873689SQ20061009245
公開日2006年12月6日 申請日期2006年6月1日 優先權日2005年6月3日
發明者長尾隆, 關范顕, 熊澤幸夫, 井坂洋一, 金子康彥, 金子順一 申請人:富士施樂株式會社, 富士膠片株式會社