專利名稱::圖象處理設(shè)備的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及圖象處理設(shè)備,該設(shè)備包括一個用于存儲定義一個輸入圖象的圖素值輸入陣列的圖象存儲裝置,還包括一個微處理器,該微處理器在一個存儲在一個程序存儲器中的程序控制下進行操作以便有系統(tǒng)地選擇輸入陣列的圖素值,從而產(chǎn)生定義一個輸出圖象的連續(xù)的輸出圖素值,選擇系統(tǒng)取決于該設(shè)備所接收的至少一個參數(shù)值。圖象處理設(shè)備有多種形式和應(yīng)用,它們與圖素值的系統(tǒng)選擇方式相關(guān)。一般選擇并組合兩個或多個輸入圖素值群或“核心”以形成每一個輸出圖素值。可以改變圖象的大小形狀或取向,也可以采用簡單插值法或更復(fù)雜的函數(shù)來對圖象過濾。所述的參數(shù)可以是例如一個橫向定標因子。理想的圖象處理是由特殊的硬件來實現(xiàn)的,但人們越來越需要利用個人計算機和家庭娛樂系統(tǒng)中的通用微處理器來實現(xiàn)圖象處理。遺憾的是,這種微處理器不能最佳地實現(xiàn)所需操作,處理一個單個圖象要花費許多秒或甚至幾分鐘時間,原因之一是需要對圖素逐一制定以決定需要選擇哪些輸入圖素值來產(chǎn)生每一個輸出圖素值以及采用什么加權(quán)因子;另一個原因是將輸入圖素值與所需的加權(quán)因子相乘需要花費時間。在本發(fā)明的一個特殊應(yīng)用領(lǐng)域中,數(shù)字化的圖象現(xiàn)在被表示在包括聯(lián)機數(shù)據(jù)庫和光存儲磁盤(CD-ROM)的媒體上。要顯示這樣的圖象,通常需要用戶能在該存儲圖象的一個所選擇區(qū)域有選擇地進行移向或移離操作(放大或縮小)。這種圖象電子放大需要對象素數(shù)據(jù)進行過濾,如采用插值函數(shù)過濾,以避免突出鑲嵌效應(yīng)和折疊。在1991年IEEEICCE文摘第316-323頁上所描述的光電CD系統(tǒng)甚至可以將單個消費者所拍攝的照片數(shù)字化并存儲在CD-ROM中以便有選擇地檢索和顯示。光電CD播放機本身包括必不可少的專用硬件,用于顯示圖象,但它對一個圖象的不同部位進行掃視和圖象放大的能力非常有限。在1991年IEEEICCE文摘第322-323頁中的論文“PhotoCDandCD-I-AMarriageofGreatConvenience(具有極大便利性的光電CD與CD-I-A的結(jié)合)”中,NormanRichards描述了一個高密度交互式磁盤(CD-I)播放機如何從一個光電CD盤中讀取和顯示圖象數(shù)據(jù)。CD-I播放機包括可由程序控制的一臺通用微處理機,而程序本身被存儲在磁盤裝置上,這一事實表明,從原理上講,在顯示之前,任何圖象變化和過濾函數(shù)都能用于檢索數(shù)據(jù)。然而在實際過程中產(chǎn)生了一個問題,即微處理器在用用戶所定義的定標因子來進行通常的圖象變化操作和過濾操作時需要花費許多時間。在采用通用個人計算機,例如在所謂桌面排版中,進行圖象檢索和顯示時存在同樣的問題。本發(fā)明的一個目的是提供一個改進的以微處理器為基礎(chǔ)的圖象處理設(shè)備,特別是這種制備可以利用先有的價格低廉的硬件,如CD-I播放機或個人計算機。本發(fā)明提供一個如本說明書第一段所述的圖象處理設(shè)備,其特征在于被編程的微處理器構(gòu)成-響應(yīng)于所接收的參數(shù)值、用于在程序存儲器中生產(chǎn)并存儲所接收的參數(shù)值所有的至少一個機器碼程序段,用于控制微處理器使其有系統(tǒng)地選擇輸入圖象的象素值以產(chǎn)生輸出圖象的象素值的一個子集的裝置;以及-使產(chǎn)生的程序段重復(fù)執(zhí)行以產(chǎn)生累積起來以定義輸出圖象的多個象素值子集的裝置。由于設(shè)備保持與所接收的參數(shù)值相關(guān),因此所產(chǎn)生的判定開銷可以被集中于編譯程序段的一次性(once-only)行為上,并且可以基本上從產(chǎn)生輸出圖象的重復(fù)系列所要求的行為中消除。輸出象素值的每一子集通??赡馨ㄝ敵鰣D象的一個象素行。因此,當在水平方向標定512象素行的一個圖象時,每個象素的判定開銷可以被減少到原來的1/512。在一個記錄載體上存貯一個圖象以便由一個交互式程序控制顯示設(shè)備隨后顯示的方法,該方法包括-對該圖象數(shù)字化以產(chǎn)生一個象素值陣列,并將該陣列存儲在該記錄載體上;-在該同一記錄載體上產(chǎn)生并存儲程序信息,該程序信息對顯示設(shè)備進行布置使其作為一個如上所述的圖象處理設(shè)備來操作,從而以依據(jù)由用戶配合所定義的至少一個參數(shù)值進行處理的一種圖象形式提供對圖象的顯示。一個記錄載體,其中存儲了一個圖象,以便隨后采用上述的方法通過一個交互式程序控制顯示設(shè)備來進行顯示。對本領(lǐng)域的普通技術(shù)人員而言,通過考慮下面所描述的實施例,本發(fā)明的進一步的變化及優(yōu)點將是顯而易見的。附圖僅僅以舉例的形式描述了一個具有交互式多媒體應(yīng)用形式的實施例,它采用高密度交互式磁盤(CD-I)播放機來處理存儲在光盤中的圖象。圖1是一個適用于實施依照本發(fā)明的圖象處理設(shè)備的CD-I播放機的方框示意圖;圖2示出了對一個輸入圖象進行的一次均勻圖象變化過濾操作;圖3示出了將均勻圖象變化操作分解為縱向和橫向過濾過程;圖4是一個流程圖,示出了實施本發(fā)明的一個圖象處理設(shè)備的操作;圖5包括示意流程圖,示出對圖4實施例判定開銷的消除。圖1中高密度交互式磁盤(CD-I)播放機包括一個高密度磁盤播放機CDP,與其相連的是一個高密度磁盤數(shù)字音頻控制器譯碼器CDDA和一個高密度磁盤控制單元CDCU。譯碼器CDDA被連到一個音頻處理單元APU上,該APU單元饋入兩個播音器LSL和LSR。CD控制單元CDCU被連到一條系統(tǒng)總線SB,在該總線中通過各種數(shù)字信號。與此系統(tǒng)總線相連的還有一個微處理器單元MPU,一個DMA控制器DMA,一個非易失性隨機存取存儲器NVRAM、一個時鐘日歷單元C/C、一個包含實時操作系統(tǒng)CDRTOS的只讀存儲器、一個鍵盤KB、一個指示裝置INP以及一個存取控制器AC。存取控制器控制對一個隨機存取存儲器RAM的讀出和寫入,該隨機存取存儲器被分為二個存儲單元0和1。該存取控制器還被連接到一個視頻譯碼器VD上,該VD又饋入到一個視頻發(fā)生器VRGB上,視頻發(fā)生器的輸出被連接到一個視頻顯示單元VDU。連接到系統(tǒng)總線SB上的還有一個自適應(yīng)式脈沖碼調(diào)制譯碼器ADPCM,該譯碼器饋入音頻處理單元APU。對圖1所示的CD-I主機(basecase)譯碼器的描述見教科書“CompactDisc-Interactive,ADesigner′sOvervew(高密度交互式磁盤,設(shè)計者指南)”,該書由PhilipsInternational編輯,KluwerTechnicalBooks出版,ISBN9020121103。CD-I播放機中的視頻譯碼器VD可以讀出圖象信息,該信息被從一個高密度磁盤(CD-ROM)傳送到了隨機存取存儲器RAM,導(dǎo)致由視頻發(fā)生器RGB為VDU產(chǎn)生適當?shù)囊曨l信號。由Philips編輯、Kluwer出版的那本書描述了如向利用各種圖象編碼格式。特別是一種稱為DYUV(“δ-YUV”)的模式提供自然彩照的高密度DPCM編碼。另一種模式已被提出用于CD-I的產(chǎn)品改型中,它采用運轉(zhuǎn)校正和離散余弦變換(DCT)編碼以獲得對全屏面、全運轉(zhuǎn)視頻圖象而言足夠高的數(shù)據(jù)壓縮。在譯碼器VD中采用一個顏色搜查表的其它編碼模式允許對包含有一定范圍色彩的復(fù)合圖形和文本圖象進行編碼。對所有這些模式而言,對每一種紅、綠和蘭可采用一種標準的8位范圍電平(0-255)。根據(jù)CCIR建議,將黑電平定義為16而不是0,將峰值自定義為235而不是255,以允許視頻信號處理過程中的某些過沖。此外,以絕對Y、U、V值存儲的光電CD圖象和其它格式存儲的圖象可以通過微處理器和適當?shù)某绦驅(qū)⑵溲b入到CD-I播放機的RAM中并且轉(zhuǎn)換為DYUV格式來顯示。程序可以以一種對用戶透明的方式存儲在諸如光電CD磁盤的一個單獨的CD-I部分。即使用戶不需要對圖形進行擴大、縮小和旋轉(zhuǎn)的便利,CD-I播放機本身可能需要進行某些橫向或縱向擴展以校正所存儲的象素(正方形)的縱橫比與所顯示的象素(矩形)的縱橫比之間的偏差。圖2示出了對一個有代表性的小象素陣列所作的圖形變化和過濾操作。輸入圖象用0至4行、每一行有標號為0至6的輸入象素值來限定,并且放置在一個正方格柵上,輸入象素位置處于整數(shù)象素位置(0,0),(0,1)……時用圓圈“0”表示。當然,在實際情況中一個圖象包括成千上萬個象素,例如一個256行×384個象素的格柵。每個圈出的位置接收一個輸入象素值且每行象素值被存儲在順接于行起始地址的一系列存儲單元中。所述行可以次序存儲,但這并不是必須的,因為可以通過給出了圖象的每個相繼行的起始地址的一個行表來尋址。為舉例起見,每一個象素值占據(jù)一個字節(jié)(8位值)并且僅僅代表一個象素顏色成份。例如,在光電CD中,亮度(Y)和色度(U和V)字節(jié)被存儲在CD-ROM中,但U或V是Y的四倍。熟悉本領(lǐng)域技術(shù)的讀者會認識到也可采用其它的成分系統(tǒng),特別是RGB,且在該系統(tǒng)中三種成份可以獨立處理(適當考慮灰度系數(shù)校正和其它非線性特性)。本實施例僅僅涉及一個成份值的處理,其它成份的處理方式與此類似。在圖2中,為舉例起見,假設(shè)系統(tǒng)的用戶已看見了輸入圖象,現(xiàn)在希望在各方向?qū)⑵鋽U大25%。對角交叉“×”表示需要為該放大進行計算的輸出象素位置。一系列的輸出象素值可以僅僅通過將最近的輸入象素復(fù)制到每個輸出象素位置來產(chǎn)生。但是眾所周知,以這種方式簡單地對輸入圖象作點采樣會產(chǎn)生一個很差的圖象,且在本實施例中需要包括用線性插值法實現(xiàn)的過濾過程。從而,對每一個輸出象素而言通常的問題就是判定圍繞該輸出象素位置的四個輸入象素位置并以適當?shù)谋壤旌舷鄳?yīng)的輸入象素值。例如,位置(1.6,1.6)的輸出值需要由(1,1)、(1,2)、(2,1)和(2,2)位置的輸入值來組成。圖3示出如何將產(chǎn)生每個輸入值的四個輸入值的雙線性插值轉(zhuǎn)換為先在縱向、然后在橫向的單獨的線性插值。在第一次操作中,通過線性插值由相鄰線的各對輸入象素值產(chǎn)生居中的象素值“+”行。例如相應(yīng)于位置(1.6,1.0)的居中象素值由位置(1,1)和(2,1)的輸入值插值,相應(yīng)于位置(1.6,2.0)的另一個居中值由(1,2)和(2,2)位置的輸入值插值來產(chǎn)生??梢宰⒁獾?,在這樣一次操作中,每一象素唯一的判定開銷是檢查行的終點,因為跨行的分數(shù)系數(shù)(對該行而言是0.6和0.4)是恒定的,而且每個居中位置“+”是在輸入象素格柵的一個整數(shù)位置。在對位置“+”產(chǎn)生了一行居中象素值后,需要進行橫向標定和在各對居中值之間插值以產(chǎn)生“×”位置的輸出象素值。要產(chǎn)生位置(1.6,1.6)處的輸出值,需要在位于(1.6,1.0)和(1.6,2.0)處產(chǎn)生的居中值對之間作插值。為了有效地進行所需的算術(shù)運算,這些輸入象素值必須由存儲器裝入到微處理器的內(nèi)寄存器中。在圖2所示的一般的圖象變化和過濾操作中,對每一輸出象素值慣常所執(zhí)行的步驟如下(a)根據(jù)輸入象素陣列計算輸出象素位置;(b)如果還沒有裝入的話,則相應(yīng)于輸出象素位置的整數(shù)部分裝入所需的輸入象素值;(c)采用與輸出象素位置的分數(shù)部分相關(guān)的系數(shù)來組合所裝入的輸入象素值;(d)存儲所得到的輸出象素值??梢钥吹?,對每一個輸出象素在步驟(b)需要若干判定,這與提供每一輸出象素的輸入象素值的數(shù)量相關(guān)。步驟(c)本身又包括若干操作以選擇用來乘以每個輸入值的一個分數(shù)系數(shù)。即使微處理器中專門配有乘法器硬件,這種選擇操作也是很耗時的。作為附錄表示在本說明書最后的列表1是一個“C”語言程序源碼列表,該程序由CD-I播放機的微處理器MPU運行來快速編譯一個機器碼程序段,當該程序段被執(zhí)行時,將產(chǎn)生一行輸出象素,該象素用一行輸入象素值的線性播值來定標。用于產(chǎn)生一組特定參數(shù)值的一小段示例程序示于列表2。通過下面的描述,熟悉本領(lǐng)域技術(shù)的讀者會認識到列表1的編譯程序只作唯一一次判定,從而列表2的機器碼行過濾程序雖然比傳統(tǒng)的過濾程序占據(jù)更多的程序存儲器,但它能產(chǎn)生一行又一行的過濾象素值而不需進一步的判定開銷。對熟悉“C”語言和用于CD-I播放機的68000系列微處理器的匯編語言的本領(lǐng)域的普通技術(shù)人員而言,后面的列表大部分是自釋的。當然,對于其它微處理器可構(gòu)造等效代碼。編譯程序(列表1)的第一部分(A)定義了某些常數(shù),這些常數(shù)是目標微處理器的至少部分特定指令。一個常數(shù)LOADTOD0是一個16位值1018(十六進制)。對68000系列微處理器MPU而言,這是一個指令“move.b(a0)+,d0”,該指令導(dǎo)致在由存儲在內(nèi)部地址寄存器a0中的一個地址所指定的存儲空間中所發(fā)現(xiàn)的一個單一字節(jié)被復(fù)制到內(nèi)部數(shù)據(jù)寄存器d0,并且對a0的地址有一個后增量(post-increment)。假設(shè)a0中的地址是一個輸入象素值的地址,該指令可被用到編譯行過濾程序中以便從存儲器裝入程序,同時更新寄存器a0中的該地址以指向該行中下一個輸入象素值。常數(shù)LOADTOD1=1218導(dǎo)致象素值被裝入到寄存器D1(move.b(a0)+,d1)。同樣,常數(shù)STOREFROMD0是一個16位值12CO(十六進制)。對微處理器而言,這是一條指令“move.bd0,(a1)+”,該指令導(dǎo)致在內(nèi)部數(shù)據(jù)寄存器d0中發(fā)現(xiàn)的一個單字節(jié)被復(fù)制到由存儲在內(nèi)部地址寄存器a1中的地址所指定的一個存儲器存儲單元中,并且該存儲地址自動后增,假設(shè)寄存器a1中的地址指向一個需要存儲一個輸出象素值的存儲空間,那么這條指令可以用于編譯程序段來寫入一個輸出象素值并且對寄存器a1的地址遞增以準備存儲下一個輸出象素值。STOREFROMD1和STOREFROMD2具有同樣的功能,其中所存儲的輸出象素值分別在寄存器d1或d2中。列表1中B處的注解確定寄存器a0和a1將分別用于保持當前輸入和輸出象素值的地址。五個寄存器a2到a6也用于存儲預(yù)先存儲的查找表的基地址,該查找表將用于實現(xiàn)象素值的快速倍增(multiplication)。為了限制表的數(shù)目,將參數(shù)量化為以0.1(十分之一)為單位。此外,由于分數(shù)參數(shù)f和(1-f)通常一起使用,并且總共僅有七個可用的地址寄存器,每個基地址a2至a6相關(guān)于一對表0.1/0.9,0.2/0.8,0.3/0.7,0.4/0.6,0.5/0.5。例如,0.1表對每個預(yù)期的8位象素值存儲一個8位值,該8位值是該8位象素值的0.1倍。0.1表起始于存儲單元(a2)減去一個位移120,而0.9表起始于存儲單元(a2)加上一個位移120。在每個查找表中沒有完整的256個值,但是由于存在下黑上白的保持帶區(qū),從而也沒有完整的256個預(yù)定象素值。各對表都是互補的,即使系數(shù)0.5的兩個表范圍也是不一樣的在第一個表中的任何舍入誤差都可在第二個表中得到補償。在執(zhí)行編譯過濾程序時,采用寄存器d2來收集加權(quán)的象素值。必要的機器碼指令的第一個字定義在列表1的C部分和D部分,該第一個字必須選擇查找表(通過選擇寄存器a2至a6),且依賴于所要求的分數(shù)系數(shù)是否為0.1,0.2,……直至0.9,需要九種不同的操作碼。注意第三個和第七個代碼是相同的(十六進制的1434),這是因為不管分數(shù)系數(shù)是0.3還是0.7,所需的查找表基地址是在寄存器a4中的。列表1C部分的代碼指示一個字節(jié)從一個有效地址裝入(move.b)到寄存器d2,該有效地址在“地址寄存器間接變址和位移”模式下被指定。列表1D部分的代碼指示一個字節(jié)以同樣的尋址方式與寄存器d2的內(nèi)容相加(add.b)。在列表1的E部分,定義一個具有64個表目的查找表用于將以64分之幾表示的一個分數(shù)值轉(zhuǎn)換為以10分之幾表示的一個分數(shù)值。在F部分,函數(shù)“編譯-過濾”定義為相關(guān)于變量“outputsize”(所需的輸出象素值的數(shù)目)、“zoomfactor”(所需的橫向定標因子)和“codebuff”(存儲器中能對機器代碼過濾程序進行編譯的一個地址)。假定“zoomfactor”在OOOO至FFFF(十六進制)范圍內(nèi),它代表0至256中的一個定標因子,具有一個8位的分數(shù)精度。例如,zoomfactor=0140(十六進制)表示一個定標因子1.25(擴大25%)。在編譯函數(shù)中,定義各種不同的狀態(tài)變量來跟蹤寄存器的內(nèi)容變量“samplein0”和“samplein1”分別指定寄存器d0和d1中的輸入象素值;“inputposn”占據(jù)具有一個16位分數(shù)部分的輸入值的沿線位置;“output”是輸出象素值;“fractional”是截斷為6位的“inputposn”的小數(shù)部分;“intposn”是“inputposn”的整數(shù)部分;“quantfrac”是轉(zhuǎn)換為十分之幾的“fraction”(0.1,0.2,0.3等等);“basereg”指示寄存器d0或d1是否持有最左邊的輸入象素值;“secondreg”指示d0或d1是否持有隨后的輸入象素值;“regused0”和“regused1”是指示寄存器d0或d1是否在使用中的標志位。在G部分開始執(zhí)行一個“for”環(huán),對0至“outputsize”的每個輸出象素值各執(zhí)行一次。有H部分啟動上面所列出的變量。在I部分檢查轉(zhuǎn)換為十分之幾的量化過程是否已將采樣位置推到了下一個輸入值。需要用來插值的兩個采樣值相應(yīng)于輸入象素位置“intposn”和“intposn”加1。在J部分確定是否第一個所需的采樣值已經(jīng)在寄存器d0或d1中并且設(shè)置了相應(yīng)的標志位。在K部分確定第二個值是否為當前值。在L部分,如果第一個所需的值不是當前值,則必須將其裝入到一個寄存器中。指令“*codeptr++=LOADTOD0”如果執(zhí)行,則導(dǎo)致編譯程序?qū)懗鰴C器碼指令“move.b(a0)+,d0”。雖然編譯程序已經(jīng)執(zhí)行了許多判定,但事實上這是列表2中所編譯的機器碼過濾例行程序的第一條指令。在M部分,如果第二個所需的值不是當前值,也必須將其裝入,但首先檢查“quantfrac”是否為零。如果是,則輸出象素值與一個輸入值一致,因而不需作插值。在示例圖象(圖3)的所有行的位置0都是如此。隨后,編譯程序進行到N去存儲一個機器碼命令“move.bd0,(a1)+”。在列表2的編碼過濾程序的僅僅兩條指令之后,存儲了第一個輸出象素值。如果需要在兩個值之間作插值,如為橫向位置0.8的第二個輸出值,那么在P和Q產(chǎn)生兩個機器碼指令,其位字段相關(guān)于量化的插值系數(shù)和寄存器的使用。第一個指令是“move.b”指令,它采用量化函數(shù)在適當?shù)牟閷け碇袑ぶ芬粋€值并將其存儲在寄存器d2中。例如,在列表2的第4行,采用地址寄存器a3來尋址0.2/0.8表,并且采用位移T1=-120,這是因為第一個輸入值是被0.2而不是0.8來乘。從而將0.2倍的第一輸入值從查找表裝入到寄存器D2。下一條指令是一個“add.b”指令,這樣(在列表2的第5行)0.8倍的第二輸入象素值被加到寄存器d2。在R部分,寫入指令“move.bd2,(a1)f”以單獨提供存儲插值計算的輸出象素值。當處理了所有的輸出值后,子例行程序指令的一條返回指令“rts”被附在編碼程序段之后(列表2的第28行),從而使其可以作為一個子例行程序來調(diào)用。列表2代表一個起始于位置0、具有定標因子1.25、產(chǎn)生一行8個輸出象素值(“outputsize”=8)的完整的編譯過濾程序。這可用以根據(jù)輸入值(中間值“+”)來產(chǎn)生圖3中的任意一行輸出值“×”。列表中的第4行和第5行對系數(shù)對0.2/0.8編碼;第8行和第9行對0.4/0.6編碼,第12行和第13行對0.6/0.4編碼,第16行和第17行對0.8/0.2編碼,第19行對第五輸入象素值的直接復(fù)制進行編碼以形成第六輸出象素值。由于在到達編譯列表的每一行之前編譯程序作了許多判定,可以看到對每一象素的判定由列表2的過濾例行程序所消除了。從而,通過重復(fù)使用這一編譯過濾程序來產(chǎn)生輸出圖象行可以獲得很大的速度優(yōu)勢。圖4示出了采用編譯過濾程序通過一個可變因子來獲得均勻定標的一個例行程序的流程圖。事實上,該流程圖與根據(jù)本發(fā)明用一個編譯處理函數(shù)所實施的任何過程大致相似,只是在各個步驟上有些細節(jié)上的變化。在400接收有關(guān)輸入象素值行的位置信息。在401設(shè)備從用戶接收所需的定標系數(shù)、修整信息,等等。在402編譯一個過濾子例行程序,過濾過程可以開始執(zhí)行。在403考慮修整信息和縱向定標系數(shù)確定一個當前縱向位置。在404確定是否需要插值來產(chǎn)生中間行。在如圖3所示的例子中,縱向位置起始值為零,這是因為第一中間行(“+”)與第一輸入行(“0”)一致。在這種情況下,在相應(yīng)輸入行中的第一個值的地址在406被裝入到地址寄存器a0,且在408執(zhí)行編譯過濾程序以通過橫向定標和插值來產(chǎn)生輸出值。如果需要縱向插值,那么在410執(zhí)行插值產(chǎn)生一行中間象素值(“+”)。在412該行中間值的地址被裝入寄存器a0,然后在408再次執(zhí)行編譯過濾程序。在414確定是否已產(chǎn)生了輸出圖象的所有行。如果沒有的話,那么控制返回到403,在此計算一個新的縱向位置,并重復(fù)其后的過程。圖5示出了對應(yīng)于步驟402(列表1)的編譯子例行程序和所編譯的行過濾子例行程序408(列表2)的示意流程圖COMP和FILT。由于空間有限,子例行程序的各個步驟沒有在流程圖中標出,但在流程圖COMP中包含了列表1的步驟參考字母A至R,以便于比較。該流程圖采用常規(guī)約定來區(qū)分以矩形方框表示的簡單操作和用菱形方框表示的判定點。這樣在列表1中J部分的“if”狀態(tài)在流程圖COMP中用一個菱形方框來表示,而列表1中G部分的“for”狀態(tài)被表示為一個設(shè)置一個計數(shù)環(huán)的簡單操作G′和一個檢測該“for”環(huán)的終止(當“output”等于“outputsize”時)的判定G″。如上所述,對由已編譯的行過濾子例行程序FILT所產(chǎn)生的每一個輸出象素值執(zhí)行一次步驟H-R和測試G″。因此對行中的每一個象素編譯過程包括的判定點(條件轉(zhuǎn)移)不少于十個。流程圖FILT示出列表2的已編譯的行過濾程序僅僅包括簡單操作的一個線性序列,其中沒有判定點。在圖4的方法中,對圖象只執(zhí)行一次步驟401(COMP),而對要過濾的圖象的每一行都執(zhí)行步驟408(FILT),并且每行都作判定414以確定圖象的最后一行。因而,對圖象整體而言,所包含的判定是一行中象素的數(shù)目的十倍加上行數(shù)的一倍。例如,對具有256行×384象素的一個普通輸出圖象來說,該公式給出具有4096個判定、還附加需要用于產(chǎn)生輸出圖象象素值的操作的一個“開銷”。通過比較可見,一個傳統(tǒng)的普通過濾子例行程序可以執(zhí)行過程,該過程有效相關(guān)于對圖象每一行所執(zhí)行的步驟401(COMP),如圖5中用虛線表示的步驟414′所示。對圖象的每一個單一象素而言,這也將包括執(zhí)行同樣的十次判定(環(huán)H至G″)。采用傳統(tǒng)的軟件要實施一個可變的過濾對同樣尺寸的圖象而言將包含近百萬的判定開銷。對任何一般的微處理器而言,這樣一種開銷將顯著地增加對圖象過濾的時間。本領(lǐng)域的普通技術(shù)人員會認識到圖4所示的新穎的過濾實施例的判定開銷相對而言是微不足道的,從而可對圖象非??焖俚剡^濾。此外,當圖象高和寬被加倍到512行×768象素時,由傳統(tǒng)方法所產(chǎn)生的判定開銷增加到原來的四倍,而該新穎的方法僅僅是兩倍。當然,本發(fā)明并不局限于圖象變化和過濾操作,過濾過程也不局限于線性插值。也可以采用旋轉(zhuǎn)過程,無論是直接的,還是作為兩個截斷操作的后繼過程,如現(xiàn)有技術(shù)中所述。對所有這些操作而言,本領(lǐng)域的普通技術(shù)人員會認識到,當前的象素位置(列表1中的“inputposition”)將在兩個方向產(chǎn)生變化,而不是僅僅沿一行變化。許多其它變化是顯而易見的,例如被組合(核心尺寸)的輸入樣值的數(shù)目、采用硬件乘法器取代查找表,等等。另一方面,被編譯的過濾程序段在使用時占據(jù)程序的幾千個字節(jié)。通過閱讀該公開說明書,對本領(lǐng)域的普通技術(shù)人員而言,其它變化將是顯而易見的。這些變化可能包含在設(shè)計、制造和應(yīng)用圖象處理設(shè)備、微處理器顯示系統(tǒng)及其組件時已知的其它特征,而且這些特征可用來取代或加到本說明書所描述的特征上。列表1A#defineFALSE0#defineTRUE1#defineLOADTOD00x1018#defineLOADTOD10x1218#defineSTOREFROMD00x12c0#defineSTOREFROMD10x12c1#defineSTOREFROMD20x12c2#defineRTS0x4e75#defineT1-120#defineT2120/*regusageBa0inputa1outputa20.1/0.9tablesa30.2/0.8tablesa40.3/0.7tablesa50.4/0.6tablesa60.5/0.5tables*/Cunsignedshortweightod2[10]={Ox4afc,/*illegal,shouldnotbeused*/Ox1432,/*0.1/0.9*/Ox1433,/*0.2/0.8*/Ox1434,/*0.3/0.7*/Ox1435,/*0.4/0.6*/Ox1436,/*0.5/0.5*/Ox1435,/*0.4/0.6*/Ox1434,/*0.3/0.7*/Ox1433,/*0.2/0.8*/Ox1432,/*0.1/0.9*/};Dunsignedshortaddweighttod2[10]={Ox4afc,/*illegal*/Oxd432,/*0.1/0.9*/Oxd433,/*0.2/0.8*/Oxd434,/*0.3/0.7*/Oxd435,/*0.4/0.6*/Oxd436,/*0.5/0.5*/Oxd435,/*0.4/0.6*/Oxd434,/*0.3/0.7*/Oxd433,/*0.2/0.8*/Oxd432,/*0.1/0.9*/};Eintfilt_quantisation[64]={0,0,0,0,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,8,8,8,8,8,8,9,9,9,9,9,9,9,10,10};intsamplein0=-1,samplein1=-1;Fcompile_filter(outputsize,zoomfactor,codebuff)intoutputsize,zoomfactor;unsignedshort*codebuff;{intinputposn=0intoutput;unsignedshort*codeptr=codebuff;intinversezoomfactor=Ox1000000/zoomfactor;Gfor(output=0;output<outputsize;output++){Hintfraction=(inputposn>>10)&Ox3f;intintposn=inputposn>>16;intquantfrac=filt_quantisation[fraction];intbasereg=-1,secondreg=-1;intreqused0=FALSE,regused1=FALSE;Iif(quantfrac=10){/*nearestpositionisnextsample*/quantfrac=0;intposn++;}J/*findwhetherfirstinputvalueisalreadyinareg*/if(samplein0=intposn){basereg=0;/*easy-itsalreadyinregd0*/regused0=TRUE;}elseif(sampleinl=intposn){basereg=1;/*itsalreadyind1*/regused1=TRUE;}K/*andthesecondvalue*/if(quantfrac){if(samplein0=intposn+1){secondreg=0;regused0-TRUE;}elseif(samplein1=intposn+1)secondreg=1;regused1=TRUE;}}/*we'vefoundanyvaluesalreadythere.Anyneedloading*/Lif(basereg=-1){if(regused0=FALSE){/*loadtod0*/*codeptr++=LOADTODO;samplein0=intposn;regused0=TRUE;basereg=0;}else{/*loadtod1*/*codeptr++=LOADTOD1;samplein1=intposn;regused1=TRUE;basereg=1;}}Mif(quantfrac){if(secondreg=-1){if(regused0=FALSE){/*loadtod0*/*codeptr++=LOADTOD0;samplein0=intposn+1;regused0=TRUE;secondreg=0;}else{/*loadtod1*1*codeptr++=LOADTOD1;samplein1=intposn+1;secondreg=1;}}}/*wehaveallrequiredvaluesinregisters.Doit*/Nif(quantfrac=0)*codeptr++=basereg=0STOREFROMDO:STOREFROMD1;else{P/*generatemove.bt1/t2(ax,dy),d2*/*codeptr++=weighttod2[quantfrac];*codeptr++=(basereg<<12)+((quantfrac5T1:T2)+0xff);Q/*generateadd.bt1/t2(ax,dy),d2*/*codeptr++=addweighttod2[quantfrac];*codeptr++=(secondreg<<12)+((quantfrac5T2:T1)&0xff);R*codeptr++=STOREFROMD2;}inputposn+=inversezoomfactor;}*codeptr++=RTS;}列表2(已編譯的過濾程序)11018move.b(a0)+,d012C0move.bd0,(a1)+1218move.b(a0)+,d114330088move.b-120(a3,d0.w),d25D4331078add.b120(a3,d1.w),d212C2move.bd2,(a1)+1018move.b(a0)+,d014351088move.b-120(a5,d1.w),d2D4350078add.b120(a5,d0.w),d21012C2move.bd2,(a1)+1218move.b(a0)+,d114350078move.b120(a5,d0.w),d2D4351088add.b-120(a5,d1.w),d212C2move.bd2,(a1)+151018move.b(a0)+,d014331078move.b120(a3,d1.w),d2D4330088add.b-120(a3,d0.w),d212C2move.bd2,(a1)+12C0move.bd0,(a1)+201218move.b(a0)+,d114330088move.b-120(a3,d0.w),d2D4331078add.b120(a3,d1.w),d212C2move.bd2,(a1)+1018move.b(a0)+,d02514351088move.b-120(a5,d1.w),d2D4350078add.b120(a5,d0.w),d212C2move.bd2,(a1)+4E75rts權(quán)利要求1.一個圖象處理設(shè)備,包括圖象存儲裝置,用于存儲定義一個輸入圖象的圖素值的輸入陣列;包括一個微處理器,在一個存儲在一個程序存儲器中的程序控制下有系統(tǒng)地選擇輸入陣列的圖素值,從而產(chǎn)生定義一個輸出圖象的連續(xù)的輸出圖素值,選擇系統(tǒng)與該制備所接收的至少一個參數(shù)值相關(guān),其特征在于,該被編程的微處理器構(gòu)成--響應(yīng)于所接收的參數(shù)值、用于在程序存儲器中產(chǎn)生并存儲所接收的參數(shù)值所專有的至少一個機器碼程序段,用于控制微處理器使其有系統(tǒng)地選擇輸入圖象的象素值以產(chǎn)生輸出圖象的象素值的一個子集的裝置;以及--使產(chǎn)生的程序段重復(fù)執(zhí)行以產(chǎn)生累積起來定義輸出圖象的多個象素值子集的裝置。2.根據(jù)權(quán)利要求1所述的設(shè)備,其特征在于輸出象素的每個子集包含輸出圖象的一個象素行。3.根據(jù)權(quán)利要求2所述的設(shè)備,其特征在于所述至少一個參數(shù)值包括一個橫向定標因子,它將所產(chǎn)生的輸出象素值的每一行的象素與輸入象素的一個相應(yīng)行相聯(lián)系。4.根據(jù)權(quán)利要求3所述的設(shè)備,其特征在于更進一步所接收的參數(shù)是一個縱向定標因子,該設(shè)備進一步包括根據(jù)該縱向定標因子在每次執(zhí)行所產(chǎn)生的程序段之前計算一個遞增的縱向象素位置的裝置,以及(ⅰ)如果該遞增的縱向象素位置與輸入圖象的一個象素行一致,則采用所述象素行作為執(zhí)行所產(chǎn)生的程序段的輸入行,或者(ⅱ)如果該遞增的縱向象素位置落在輸出圖象的兩個象素行之間,則產(chǎn)生象素值的一個插值行作為執(zhí)行所產(chǎn)生的程序段的輸入行。5.在一個記錄載體上存貯一個圖象以便由一個交互式程序控制顯示設(shè)備隨后顯示的方法,該方法包括-對該圖象數(shù)字化以產(chǎn)生一個象素值陣列,并將該陣列存儲在該記錄載體上;-在該同一記錄載體上產(chǎn)生并存儲程序信息,該程序信息對顯示設(shè)備進行布置使其作為一個如權(quán)利要求1-4所述的圖象處理設(shè)備來操作,從而以依據(jù)由用戶配合所定義的至少一個參數(shù)值進行處理的一種圖象形式提供對圖象的顯示。6.一個記錄載體,其中存儲了一個圖象,以便隨后采用權(quán)利要求5所述的方法通過一個交互式程序控制顯示設(shè)備來進行顯示。全文摘要一臺微處理器(MPU)被編程以根據(jù)對輸入象素值的系統(tǒng)選擇和組合來處理一個輸入圖象的象素值從而產(chǎn)生一個輸出圖象,用作選擇和組合的系統(tǒng)依賴于一個變量(例如圖象變化因子),相關(guān)于該參數(shù)值的裝置編譯(401)。該參數(shù)所專有的一個機器碼子例行程序并且導(dǎo)致產(chǎn)生一行輸出象素值,然后重復(fù)執(zhí)行這一編譯過濾程序以產(chǎn)生所有的輸出圖象行。該設(shè)備基本消除了對每一象素所作的判定,從而與傳統(tǒng)的微處理器設(shè)備相比要快得多。文檔編號G09G5/36GK1073791SQ92114468公開日1993年6月30日申請日期1992年12月17日優(yōu)先權(quán)日1991年12月20日發(fā)明者D·E·彭納申請人:菲利浦光燈制造公司