实时影像自动裁剪方法
技术领域
本发明涉及一种实时影像自动裁剪方法,尤指一种不需经过预扫,便可执行实时影像自动裁剪的方法。
背景技术
影像自动裁剪(auto-crop)的方法是在扫描的应用程序上,当用户将原稿经过预扫(pre,scan)后,扫描器可以自动读取原稿的影像区块。已往针对有效影像区域的自动裁剪,在TWAIN模组外的用户界面扫描(non-user interface scan)或是包含于TWAIN模组中的TWAIN用户界面扫描(user interface scan)中,都是经由一次预扫过后,再从预扫所得到的原稿影像中取出每一图素(pixel)的R、G、B值来做判断,以找出有效数据区域的大小。然后,重新设定扫描器实际所要扫描的范围,以去除无效区域的数据,或再由用户框取所需要扫描的区域。
传统的裁剪方法因需经过预扫的过程,所以即使实际所需的被扫描物面积很小,仍然要花费相同的时间,而且,在此情况下,预扫阶段所传回的大部分数据都是无效的,却仍需花费同样的资源来处理。例如,扫描器为A3大小,而扫描的图片仅是一张3*5的照片,若利用现有的自动裁剪方法,必须由扫描器以彩色模式(Color Mode)扫过A3大小的面积。若为TWAIN模组外的用户界面扫描,则需再经过演算法的判断运算,才能得到此张3*5的照片在扫描器上的坐标。然后重新设定扫描范围,锁定照片所在的位置后再扫描一次,才能得到经过自动裁剪的影像数据。
发明内容
本发明的主要目的是提供一种实时影像自动裁剪方法,可不必经过预扫程序,而能直接读取所要扫描的文件,以提高扫描的效率。
本发明的又一目的是提供一种可快速有效读取所需文件大小的方法,使驱动程序不需读取大量无效的数据,而可实时有效地改变数据传输量,进而节省扫描时间。
本发明的影像实时自动裁剪方法是这样实现的:包含有下列步骤:
(a)依序读取来自扫描器的每一部分影像区块,直至该部分影像区块中出现有效的影像数据,并储存该部分影像区块于第一存储装置中;
(b)记录该第一存储装置中的部分影像区块的每一图素的属性于第二存储装置中,直至该部分影像区块中出现有效的影像数据,及通过与所设定值比较得到该图素为有效或无效的属性;
(c)在找到该首次出现的有效的影像数据时,计算该有效的影像数据图素的左顶点坐标及右顶点坐标;
(d)执行每一部分影像区块的横向取样,以判定部分影像区块是否包含结尾的线条;
(e)依据该第二存储装置中该有效的影像数据图素的左顶点坐标及右顶点坐标,计算该有效的影像数据的宽度,并累计该首次出现的有效影像数据的线数;
(f)依据该步骤(e)所计算的宽度,重新设定扫描器的扫描宽度;
(g)依序读取该扫描器所传送来的影像区块,直到读取到该扫描影像的结尾线条,并直接将该有效的影像数据写入该点阵图文档中,及累计该有效影像数据的线条数,或将影像数据缓冲器数据及影像结束的信息,传回给上层影像处理软件;以及
(h)设定累计该有效影像数据的线条数为原稿的长度,并将该长度及宽度写入一点阵图文档的表头中,或通知上层影像处理软件结束影像数据的读取,以完成裁剪范围的设定。
上述的步骤(b)包含下列步骤:当上述图素的色阶值小于上述的设定值时,判定该图素为无效;以及当上述图素的色阶值大于上述的设定值时,判定该图素为有效。
上述的步骤(c)包含下列步骤:记录有效的影像数据的每一条横线的起始位置于第一阵列;记录有效的影像数据的每一条横线的结束位置于第二阵列;执行该第一阵列起始位置后的所有储存的值的平均计算,及该平均计算所得的值为上述有效影像数据图素的起始顶点坐标;以及执行该第二阵列起始位置后的所有储存的值的平均计算,及该平均计算所得的值为上述的有效影像数据图素的终止顶点坐标。
上述的步骤(d)包含下列步骤:设定多个取样线区域,及该每个取样线区域包含多条的影像;以一设定的间距,读取该多个取样线区域;当判定在该设定的间距内所读取的有效图素超出一设定数时,判定该线区域为有效;以及当判定在该设定的间距内所读取的无效图素超出一设定数时,判定该线区域为无效。
上述的宽度及长度的设定是依据点阵图的文档格式而设定。
上述的实时影像自动裁剪方法,还包含下列步骤:
当上述的线区域为第一次取样,且影像数据都为有效时,且使用包含于TWAIN模组中的TWAIN用户界面存取,并选择直接从扫描器传回缓冲器数据时,将上述第一存储装置中的有效的影像数据区域的指标,及有效线条的数目,填入一设定的参数,并将该参数传回至一影像处理软件;
当上述的线区域为第一次取样,且影像数据都为有效时,且使用包含于TWAIN模组中的TWAIN用户界面存取,并选择传回一影像文档时,则将数据写入影像文档之中,并累计此次所传回的线条数,且继续接收从扫描器所传回的影像数据;
当上述的线区域为第一次取样,且影像数据都为有效时,且使用TWAIN模组外的用户界面存取,则将数据写入影像文档之中,并累计此次所传回的线条数,且继续接收从扫描器所传回的影像数据。
上述的实时影像自动裁剪方法,包含有下列步骤:当上述的线区域为最后一次取样时,且使用包含于TWAIN模组中的TWAIN用户界面存取,并选择直接从扫描器传回缓冲器数据时,将上述的第一存储装置中的有效的影像数据区域的指标、有效线条的数目,及文档结束的数据,传回至一影像处理软件,并同时通知扫描器停止扫描;
当上述的线区域为最后一次取样时,且使用包含于TWAIN模组中的TWAIN用户界面存取,并选择传回一影像文档时,累计此次所传回的线条数,并填妥点阵图文档的表头;
当上述的线区域为最后一次取样时,且使用TWAIN模组外的用户界面存取,累计此次所传回的线条数,并填妥点阵图文档的表头;以及结束文档,并通知扫描器停止扫描。
上述的实时影像自动裁剪方法,包含有下列步骤:
(i)关闭上述的点阵图文档,并将上述的点阵图文档的文档名称当作参数传送至应用程序,或将影像数据缓冲器数据及影像结束的信息传回给上层影像处理软件;
(j)当找到上述的扫描影像的结尾线条时,传送一控制信号至上述扫描器,以停止扫描。
本发明的另一种影像实时自动裁剪方法是这样实现的:包含有下列步骤:
(a)在部分影像区块中寻找首次出现的有效影像数据,并将该首次出现的有效影像数据写入一点阵图的文档中,并累计该首次出现的有效影像数据的线数;
(b)计算该首次出现的有效影像数据的宽度:记录有效的影像数据的每一条横线的起始位置于第一阵列;记录有效的影像数据的每一条横线的结束位置于第二阵列;执行该第一阵列起始位置后的所有储存的值的平均计算,及该平均计算所得的值为上述有效影像数据图素的起始顶点坐标;以及执行该第二阵列起始位置后的所有储存的值的平均计算,及该平均计算所得的值为上述有效影像数据图素的终止顶点坐标;
(c)重新设定扫描器的扫描宽度,以读取后续的影像数据;
(d)执行每一部分影像区块的横向取样,以判定该部分影像区块是否包含结尾的线条;
(e)依序读取该扫描器所传送来的影像区块直到读取到该扫描影像的结尾线条,并直接将该有效的影像数据写入该点阵图文档中,及累计该有效影像数据的线条数,或将影像数据缓冲器数据及影像结束的信息,传回给上层影像处理软件;
(f)设定累计该有效影像数据的线条数为原稿的长度,并将该长度及宽度写入一点阵图文档的表头中,或通知上层影像处理软件结束影像数据的读取,以完成裁剪范围的设定;
(g)关闭该点阵图文档,并将该点阵图文档的文档名称当作参数,传送至应用程序或数据来源;以及
(h)传送一控制信号至该扫描器,以停止扫描。
当上述的有效影像数据的图素的色阶值都大于一设定的R,G,B值时,判定该图素为有效。
上述的步骤(d)包含有下列步骤:设定多个取样线区域,及该每个取样线区域包含多条的影像;以一设定的间距,读取该多个取样线区域;当判定在该设定的间距内所读取的有效图素超出一设定数时,判定该线区域为有效;以及当判定在该设定的间距内所读取的无效图素超出一设定数时,判定该线区域为无效,
上述的宽度及长度的设定是依据点阵图的文档格式而设定。
上述的影像实时自动裁剪方法,包含有下列步骤:当上述的线区域为第一次取样,且影像数据都为有效时,且使用包含于TWAIN模组中的TWAIN用户界面存取,并选择直接从扫描器传回缓冲器数据时,将上述的第一存储装置中的有效的影像数据区域的指标,及有效线条的数目,填入一设定的参数,并将该参数传回至上层影像处理软件;当上述的线区域为第一次取样,且影像数据都为有效时,且使用包含于TWAIN模组中的TWAIN用户界面存取,并选择传回一影像文档时,则将数据写入影像文档之中,并累计此次所传回的线条数,且继续接收从扫描器所传回的影像数据;当上述的线区域为第一次取样,且影像数据都为有效时,且使用TWAIN模组外的用户界面存取,则将数据写入影像文档之中,并累计此次所传回的线条数,且继续接收从扫描器所传回的影像数据。
上述的影像实时自动裁剪方法,包含有下列步骤:当上述的线区域为最后一次取样时,且使用包含于TWAIN模组中的TWAIN用户界面存取,并选择直接从扫描器传回缓冲器数据时,将上述的第一存储装置中的有效的影像数据区域的指标、有效线条的数目、及文档结束的数据,传回至上层影像处理软件,并同时通知扫描器停止扫描;当上述的线区域为最后一次取样时,且使用包含于TWAIN模组中的TWAIN用户界面存取,并选择传回一影像文档时,累计此次所传回的线条数,并填妥点阵图文档的表头;当上述的线区域为最后一次取样时,且使用TWAIN模组外的用户界面存取,累计此次所传回的线条数,并填妥点阵图文档的表头:以及结束文档,并通知扫描器以停止扫描。
本发明主要提出一种可实时找出扫描文件的影像宽度及长度的方法,以设定裁剪范围,并同时将扫描的影像数据写入点阵图的文档中,或将影像缓冲器数据传回上层影像处理软件,因而可省去预扫程序。本发明包含有步骤:当影像从扫描器逐次传送一设定的影像区块至缓冲器时,搜寻首次出现的有效影像数据。然后,从该有效影像数据中寻找其左右顶点的坐标,以计算其宽度。然后将宽度的数据传送给扫描器,扫描器便可依据宽度重新设定扫描的宽度,并扫描剩余的影像数据。每当扫描器传送影像数据至缓冲器时,底层的驱动程序同时会传送表示此次所传送的有效影像数据的影像线条数。因此,累计每次所得的线条数,便可得知有效影像数据的长度。同时,为得知影像结尾的位置,以横向取样的方法,在缓冲器中的每一影像区块中搜寻原稿影像的结尾。当判定原稿影像结尾的线条时,传送控制信号至扫描器以停止扫描,并将所得到的长宽写入点阵图文档的表头中,或将影像缓冲器数据传回上层影像处理软件,以完成影像裁剪大小的设定。
附图说明
图1为本发明与应用程序及TWAIN沟通扫描器的结构示意图;
图2为一扫描数据的示意图;
图3为一有效区块的起始坐标及结束坐标的示意图;
图4-图5为本发明的有效区块的宽度计算阵列示意图;
图6为显示本发明的寻找文件结尾的方法示意图;
图7-图11为显示本发明的寻找有效区块位置的方法示意图。
具体实施方式
本发明的结构如图1所示。本发明的影像的实时自动裁剪可分为包含于TWAIN模组中的TWAIN用户界面存取142及TWAIN模组外的用户界面存取12两种。TWAIN模组外的用户界面存取12被一应用程序11所呼叫,并通过TWAIN13(Technology Without an Important[Interesting]Name)的界面,以读取来自扫描器15的影像数据。在TWAIN模组外的用户界面存取12时,因TWAIN的界面标准中无法设定自动选取扫描范围的常数,因此,本发明的方法提供一TWAIN模组外的用户界面存取12的实时自动裁剪模组121,以供用户在影像应用程序11之下,仍能利用本发明的方法,以对单一形状的物件执行影像的实时自动裁剪。如此,在开启一应用程序11时,若要在该应用程序11中同时直接扫描图片或文件的影像时,便可借由TWAIN13的驱动程序,作为应用程序11及扫描器15硬件之间的界面。来自扫描器15的影像数据便暂存在数据来源14(data source)中,以供TWAIN13驱动程序的读取。
另外,在包含于TWAIN模组中的TWAIN用户界面存取142的情况下,由于不需经过TWAIN下指令(Command),所以本发明可直接借由设定扫描范围的方法,取得有效的扫描区域的大小。本发明提供一包含于TWAIN模组中的TWAIN用户界面存取142的实时自动裁剪模组141,在数据来源14提供用户直接执行实时自动裁剪。TWAIN模组外的用户界面存取12的自动裁剪模组121及包含于TWAIN模组中的TWAIN用户界面存取142的实时自动裁剪模组141除了设定的方式不同外,在得到由扫描器15所传回的影像数据后的处理演算法(Algorithm)及方法都是相同的。
由于本发明的目的是实时取得扫描物件的大小,而非从预扫的影像数据中去判断扫描物件的大小,因此,本发明的方法、在从扫描器15读取影像的数据时,必须同时获知原稿的影像的大小,并可在扫描完毕时,完成原稿的大小设定。来自扫描器15的影像数据暂存在一缓冲器中,以作为后续处理之用。缓冲器中的图素依据蓝、绿、红的颜色依续排列,每个颜色各占一比特组。
为防止一次读取太多无效的影像数据,本发明每次只读取N分之1的部分影像区块,直到找到有效的影像数据。所谓最大范围的N分之1是指扫描器所能扫描的平面中,宽度取最大宽度,而高度取该平面的N分之1。N为一预设值,例如5,设定完后,程序收到扫描器15所传回的N分之1的扫描范围信息,直到找到有效的影像数据。
为得知原稿的大小,必须在扫描的同时判定并计算原稿的长度及宽度。在宽度的取得方面,本发明先宣告一暂存区块。暂存区块为一存储空间,以纪录从扫描器15所传回的缓冲器中的每一个部分影像区块的图素的有效值或无效值。如果图素的R、G、B值小于一特定的色阶,则该图素便判定为无效。如果缓冲器中的图素都为无效,则缓冲器中的所有数据便需舍弃。继续接收由扫描器15传送的剩余影像区块至缓冲器。若该N分之一的影像己传送完毕,将再设定扫描器15继续扫描下一个N分之一的部分影像区块至缓冲器。如此,再次判断缓冲器中部分影像区块的图素的有效值,直到其中出现了有效的影像数据。
有效的影像数据是指在裁剪范围(crop range)内的有效图素。为正确地判定有效的影像数据范围,本发明先去除杂讯。如果图素的R,G,B色阶大于一特定的色阶,且其四周的连续的图素少于K个(此例中K=4),则判定该图素为杂讯,并去除之。如图2所示,图素a,b,c,d,e分别表示色阶大于60的图素,且非连续地排列;因此便判定为杂讯。在杂讯移除后,在暂存区块中该影像区块31中的有效影像数据32便如图3所示。
由于有效影像数据32的影像起始处舆左右边在图素的层次而言,并非整齐地排列,因此,便以其平均四舍五入后的位置当作有效影像数据32的第一纵列(column)及最后一横排(row)的位置。也就是,将每一横排(row)的第一个图素位置的平均四舍五入后的位置,当作有效影像数据32的左边位置。将每一横排(row)的最后一个图素位置的四舍五入后的平均位置,当作有效影像数据32的右边位置。如此,以平均法判断有效影像数据32每一横排的起点与终点的位置。建立一阵列41,如图4所示,以记录每一横排的第一个有效值的起始位置(以图素为单位)。图4中的阵列包含扫描影像上方的所有值,如第一横排起始处填“0”,终止处也填“0”。在有效形像数据32起始前方应都为无数据,故两阵列中的起点坐标与终点坐标都为“0”,而在有效影像数据32起始附近的区域,可能因边缘会参差不齐,故阵列起点终点与其它一般的值差异性较大,因而舍弃最先前几横排取出图片的起始处。例如,舍弃最前面两横排的数据,即“7”与“5”,而从之后的有效影像数据32开始计算一设定值的数据,如50横排当作影像的有效影像数据32的区块。并以“3”当作有效值的起始位置。然后,将每个起始位置作平均值的计算,并将其四舍五入后所得的值作为有效区块的起始位置。
同理,建立另一阵列42,以记录每一横排的最后一个有效值的终止位置(以图素为单位),如图5所示。舍弃最前面两横排的数据,即“17”舆“20”,而从之后的“21”的有效影像数据32开始计算一设定值的数据。例如,“21”表示最后一个有效的图素位置在第21个图素。同样,将阵列42中所记录的每个终止位置,计算其平均值,并以四舍五入后所得的值作为该有效影像数据32的终止位置。
由所求出的有效区块的终止位置减去有效区块的起始位置,便等于有效影像数据32的宽度。所得到的宽度便传送至扫描器15,以重新设定扫描物件的扫描范围。由于宽度己设定完毕,暂存区块的存储空间便可释出。
首次出现的有效影像数据32将写入点阵图文档中。同时,底层所传回的参数中有标示此次影像数据缓冲器中储存了几条线的数据。将参数减去有效区块的起始位置,并把结果存入计数器,记录并累计影像的线条数。由于扫描仍在进行中,扫描的原稿的长度尚无法得知,因此本发明以横向取样的方式判断扫描物件的影像的终止位置。在实施上,有许多种可能的作法。本发明以横向取样的方式读取每一扫描区块内的影像数据,如图6所示。
首先,将影像看料缓冲器所传回来的每一扫描区块分为四个线区域,第一个线区域51为缓冲器的起始部分,最后一个线区域54为缓冲器最后的部分,中间两个线区域52,53则平均分布于影像数据缓冲器中间。每个线区域包含了三条线。假设n为有效区域的线条总数,则每个线区域之间所间隔的线条数m便可由以下计算公式计算出来:
[n-(4*3)]÷3=m。
接着,检查每个线区域中每条线的图素的有效值。每隔十分之一的距离,取其图素来检查其图素的值是否为无效值。其判定方式是依据以下的准则:
(1)如果此条线区域所含的无效值的图素超过90%,也就是图素的R、G、B值都小于60色阶,则判定此条线区域为无效线,并标为无效(FALSE)。
(2)若此条线区域所含的无效值的图素低于90%,则需作第二次检查。此次取样的图素为将第一次取样的图素向右位移一设定的距离,如第一次检查中两点间距离的三分之一,然后执行如步骤(1)的判定。例如,假设最多只检查三次,第一次由第一个图素的位置开始,第二次的检查由第3个图素的位置开始,依此类推。如果无效的图素仍然超过90%,便判定此线区域为无效。
(3)如果步骤(2)的线区域所含的无效值的图素仍低于90%,则将此次取样的图素设定为将第二次取样的图素向右位移一设定的距离,如第一次检查中两点间距离的三分之一,然后执行如步骤(1)及步骤(2)的判定。
在将每个线区域检查之后,便可依据最后所得的结果来判定该线区域是否为原稿影像结尾的部分,如图7~图11所示。
若四个线区域都为有效,如图7所示,则表示此次缓冲器所传回的影像数据(Image Data)都为有效值。若此次为第一次取样的线区域,且使用包含于TWAIN模组中的TWAIN用户界面存取142,并选择直接从扫描器传回缓冲器数据,便将缓冲器中有效区域的暂存器指标,及将此次有效线条的数目,重新填入原本底层所传回的有标示此次影像数据缓冲器中储存了几条线的数据的参数,传回给上层的影像处理软件。
若使用包含于TWAIN模组中的TWAIN用户界面存取142,并选择传回一影像文档,或是使用TWAIN模组外的用户界面存取12,则将数据写入影像文档中,并累计此次所传回的线条数,且继续接收从扫描器所传回的影像数据。
若此次为逐次横向取样后所分割的线区域,则表示在此划分线区域以下为无效区,影像达到结尾处。若使用包含于TWAIN模组中的TWAIN用户界面存取142并选择直接从扫描器传回缓冲器数据,便将缓冲器中有效区域的暂存器指标、此次有效线条的数目及图片文档结束的信息等参数填好,并传回给上层的影像处理软件,同时通知扫描器停止扫描。
若便用包含于TWAIN模组中的TWAIN用户界面存取142并选择传回一影像文档,或是使用TWAIN模组外的用户界面存取12,累计此次所传回的线条数,填妥点阵图文档的表头(Bitmap,file header),并结束文档,然后通知扫描器以停止扫描。
若四个线区域都为无效,如图8所示,则表示此次所传回的影像数据都为无效值,因此不处理此次的数据。若此次为第一次分割的线区域,且使用包含于TWAIN模组中的TWAIN用户界面存取142,并选择直接从扫描器传回缓冲器数据,便将图片文档结束的参数填好,并传回给上层的影像处理软件,同时通知扫描器停止扫描。若使用包含于TWAIN模组中的TWAIN用户界面存取142,并选择传回一影像文档,或是使用TWAIN模组外的用户界面存取12,填妥点阵图文档的表头(Bitmap fileheader),并结束文档,然后通知扫描器以停止扫描。
若此次为逐次横向取样后最后所分割的线区域,则表示在此划分线区域以前为有效区,影像达到结尾处。若使用包含于TWAIN模组中的TWAIN用户界面存取142,并选择直接从扫描器传回缓冲器数据,便将缓冲器中有效区域的暂存器指标、此次有效线条的数目及图片文档结束的信息等参数填好,并传回给上层的影像处理软件,同时通知扫描器停止扫描。
若使用包含于TWAIN模组中的TWAIN用户界面存取142,并选择传回一影像文档,或是使用TWAIN模组外的用户界面存取,累计此次所传回的线系数,填妥点阵图文档的表头(Bitmap file header),并结束文档,然后通知扫描器以停止扫描。
若线区域61、62为有效,而线区域63、64为无效,如图9所示,则原稿的影像结尾将会出现在线区域62、63之间。在此情况下,需在线区域62、63之间再以先前的横向取样方式搜寻,直到找到原稿的影像结尾。而找到结尾的线条后,累计此次的有效线条数。
若线区域是有效值及无效值相互参杂,如图10所示,则以无效值为基准,因为若是到达原稿的影像结尾,则其影像数据会呈现色调一致的黑线(全为无效值),而非相互参杂。然后,以全为无效值的线区域和其前面一个线区域间再以同样方式寻找原稿影像的结尾。以图10为例,原稿影像的结尾便是在线区域65、66之间。如此,在线区域65、66之间再以先前的方式搜寻,直到找到图片结束的线条。而找到结尾的线条后,再累计此次的有效线条数。
另一种情形如图11所示,线区域全为有效及无效值参杂。则将此次所传回的影像数据判定为都为有效值,其处理方式与四个线区域都为有效值的处理方式相同。
于是,本发明便可实时地读取原稿的影像数据,因为影像数据己在扫描时同步地写入点阵图的文档中,或将影像缓冲器数据传回上层的影像处理软件。而且,本发明只读取有效的影像数据,因为在原稿影像的宽度确定后,扫描器便重新设定扫描的范围,以更进一步免除读取不必要的影像数据,以节省处理时间与无效数据的传送。
由于本发明的方法可免除预扫的程序,因此在扫描单一尺寸且数量多的原稿的情况下,其扫描的效率尤为显著。但由于原稿的宽度必须一次设定完成,所以本发明的方法并不适用于原稿歪斜放置的情况。
以上所述仅为本发明的较佳实施例而已,且已经达到广泛的实用功效,凡依本发明申请专利范围所作的均等变化与修饰,都属于本发明专利涵盖的范国内。