本發(fā)明涉及一種病案掃描技術,具體涉及一種實現(xiàn)病案高清掃描的方法。
背景技術:
病案指按規(guī)范記錄病人疾病表現(xiàn)和診療情況的檔案,由醫(yī)療機構的病案管理部門按相關規(guī)定保存。不僅有紙質的,還有電子文檔、醫(yī)學影像檢查膠片、病理切片等保存形式。指醫(yī)務人員記錄疾病診療過程的文件,它客觀地、完整地、連續(xù)的記錄了病人的病情變化、診療經(jīng)過、治療效果及最終轉歸,是醫(yī)療、教學、科研的基礎資料,也是醫(yī)學科學的原始檔案材料,現(xiàn)有的病案都是通過掃描儀進行掃描轉化為圖片存儲在電腦上,因病案的掃描量極大,掃描件的清晰度無法得到保證,但現(xiàn)有的技術很難克服上述問題。
技術實現(xiàn)要素:
本發(fā)明要解決的技術問題是克服現(xiàn)有的的問題,提供一種實現(xiàn)病案高清掃描的方法。
為了解決上述技術問題,本發(fā)明提供了如下的技術方案:
本發(fā)明提供了一種實現(xiàn)病案高清掃描的方法,包括如下步驟:選擇一款600dpi分辨率的高拍儀,并將將高拍儀的數(shù)據(jù)線和電腦usb接口連接,安裝高拍儀的驅動程序,安裝完成后,找一處桌面光照均勻的地方將高拍儀擺放好,將需要掃描的病案平整放在高拍儀的攝像頭下方,使用電腦上的軟件對其進行掃描,掃描時,高拍儀中的燈管從攝像頭處將光線照射到待掃描的病案上,光線反射后由cmos感光元件接收,但是由于圖像色彩的深淺不一,使得反射光強度也各不相同,感光元件可以接收各種強度的光并轉化為二進制的數(shù)字符號,最后由控制掃描的軟件把這些數(shù)據(jù)還原為顯示器上可以看到的圖像,并存儲在存儲器中。
作為本發(fā)明的一種優(yōu)選技術方案,所述存儲器中的圖片將通過usb傳輸?shù)姆绞缴蟼鞯诫娔X中,再將其上傳到服務器上,在服務器中采用最臨近點插值算法、雙線性插值算法、雙立方插值算法、等多種算法對掃描圖片進行處理。
作為本發(fā)明的一種優(yōu)選技術方案,所述最臨近點插值算法是當二維數(shù)字圖像從源圖像n*m被放為(j*n)*(k*m)目標圖像是,參照數(shù)學斜率計算公式必然有:(x1-xmin)/(xmax-xmin)=(y1-ymin)/(ymax-ymin),當xmin和ymin均為從零開始的像素點時,公式可以簡化為:x=y(tǒng)1(xmax/ymax),對于任意一幅源圖像來說,假設放大后目標圖像的寬為dw高為dh,任意目標像素點(dx,dy),在源圖像上的位置為:sx=dx*(sh/dh)//row;sy=dy*(sw/dw)//column;其中,(sx,sy)為對于的源圖像上的像素點,sw和sh分別為源圖像的寬度和高度。最終有dpixel(dx,dy)=spixel(sx,sy)。
作為本發(fā)明的一種優(yōu)選技術方案,所述雙線性插值算法是對于一個目的像素,設置坐標通過反向變換得到的浮點坐標為(i+u,j+v),(其中i、j均為浮點坐標的整數(shù)部分,u、v為浮點坐標的小數(shù)部分,是取值[0,1)區(qū)間的浮點數(shù)),則這個像素得值f(i+u,j+v)可由原圖像中坐標為(i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所對應的周圍四個像素的值決定,即:f(i+u,j+v)=(1-u)(1-v)f(i,j)+(1-u)vf(i,j+1)+u(1-v)f(i+1,j)+uvf(i+1,j+1)其中f(i,j)表示源圖像(i,j)處的的像素值,以此類推。
作為本發(fā)明的一種優(yōu)選技術方案,所述雙立方插值算法涉及到16個像素點,其中(i’,j’)表示待計算像素點在源圖像中的包含小數(shù)部分的像素坐標,dx表示x方向的小數(shù)坐標,dy表示y方向的小數(shù)坐標,雙立方插值是立方插值在二維空間的表達,插值公式可以表述為:g(x,y)=f(f(p00,p01,p02,p03,y),f(p10,p11,p12,p13,y),f(p20,p21,p22,p23,y),f(p30,p31,p32,p33,y),x)解出其中的16個參數(shù),即可得帶g(x,y)目標插值點的值。
本發(fā)明所達到的有益效果是:該方案是一種實現(xiàn)病案高清掃描的方法,該方案采用高拍儀進行紙質病案掃描,掃描后的病案圖片將以文件的形式存儲到服務器上,后臺采用最臨近點插值算法、雙線性插值算法、雙立方插值算法、最臨近點插值縮放等多種算法對掃描圖片進行處理,保證掃描件的高清晰度。
附圖說明
附圖用來提供對本發(fā)明的進一步理解,并且構成說明書的一部分,與本發(fā)明的實施例一起用于解釋本發(fā)明,并不構成對本發(fā)明的限制。在附圖中:
圖1是本發(fā)明的實施模塊示意圖;
具體實施方式
以下結合附圖對本發(fā)明的優(yōu)選實施例進行說明,應當理解,此處所描述的優(yōu)選實施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。
實施例1
如圖1所示,本發(fā)明提供一種實現(xiàn)病案高清掃描的方法,包括如下步驟:選擇一款600dpi分辨率的高拍儀,并將將高拍儀的數(shù)據(jù)線和電腦usb接口連接,安裝高拍儀的驅動程序,安裝完成后,找一處桌面光照均勻的地方將高拍儀擺放好,將需要掃描的病案平整放在高拍儀的攝像頭下方,使用電腦上的軟件對其進行掃描,掃描時,高拍儀中的燈管從攝像頭處將光線照射到待掃描的病案上,光線反射后由cmos感光元件接收,但是由于圖像色彩的深淺不一,使得反射光強度也各不相同,感光元件可以接收各種強度的光并轉化為二進制的數(shù)字符號,最后由控制掃描的軟件把這些數(shù)據(jù)還原為顯示器上可以看到的圖像,并存儲在存儲器中。
存儲器中的圖片將通過usb傳輸?shù)姆绞缴蟼鞯诫娔X中,再將其上傳到服務器上,在服務器中采用最臨近點插值算法、雙線性插值算法、雙立方插值算法、等多種算法對掃描圖片進行處理。
最臨近點插值算法是當二維數(shù)字圖像從源圖像n*m被放為(j*n)*(k*m)目標圖像是,參照數(shù)學斜率計算公式必然有:(x1-xmin)/(xmax-xmin)=(y1-ymin)/(ymax-ymin),當xmin和ymin均為從零開始的像素點時,公式可以簡化為:x=y(tǒng)1(xmax/ymax),對于任意一幅源圖像來說,假設放大后目標圖像的寬為dw高為dh,任意目標像素點(dx,dy),在源圖像上的位置為:sx=dx*(sh/dh)//row;sy=dy*(sw/dw)//column;其中,(sx,sy)為對于的源圖像上的像素點,sw和sh分別為源圖像的寬度和高度。最終有dpixel(dx,dy)=spixel(sx,sy)。
雙線性插值算法是對于一個目的像素,設置坐標通過反向變換得到的浮點坐標為(i+u,j+v),(其中i、j均為浮點坐標的整數(shù)部分,u、v為浮點坐標的小數(shù)部分,是取值[0,1)區(qū)間的浮點數(shù)),則這個像素得值f(i+u,j+v)可由原圖像中坐標為(i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所對應的周圍四個像素的值決定,即:f(i+u,j+v)=(1-u)(1-v)f(i,j)+(1-u)vf(i,j+1)+u(1-v)f(i+1,j)+uvf(i+1,j+1)其中f(i,j)表示源圖像(i,j)處的的像素值,以此類推。
雙立方插值算法涉及到16個像素點,其中(i’,j’)表示待計算像素點在源圖像中的包含小數(shù)部分的像素坐標,dx表示x方向的小數(shù)坐標,dy表示y方向的小數(shù)坐標,雙立方插值是立方插值在二維空間的表達,插值公式可以表述為:g(x,y)=f(f(p00,p01,p02,p03,y),f(p10,p11,p12,p13,y),f(p20,p21,p22,p23,y),f(p30,p31,p32,p33,y),x)解出其中的16個參數(shù),即可得帶g(x,y)目標插值點的值。
需要說明的是,最臨近點插值算法從bufferedimage對象中獲取像素數(shù)組的代碼如下:
inttype=img.gettype();
if(type==bufferedimage.type_int_argb||
type==bufferedimage.type_int_rgb){
img.getraster().setdataelements(x,y,width,height,pixelsdata);
}
else{
img.setrgb(x,y,width,height,pixelsdata,0,width);
}
1
從源圖像對象一維像素數(shù)組轉換為三維對象數(shù)組,代碼如下:
int[][][]tempdata=newint[imgrows][imgcols][4];
tempdata[row][col][0]=(arow[col]>>24)&0xff;//alpha
tempdata[row][col][1]=(arow[col]>>16)&0xff;//red
tempdata[row][col][2]=(arow[col]>>8)&0xff;//green
tempdata[row][col][3]=(arow[col])&0xff;//blue
首先要計算行與列的縮放比例,計算代碼如下:
floatrowratio=((float)srch)/((float)desth);
floatcolratio=((float)srcw)/((float)destw);
計算源像素點的行位置:
intsrcrow=math.round(((float)row)*rowratio);
計算源像素點的列位置:
intsrccol=math.round(((float)col)*colratio);
程序源代碼
publicclassnearnaighborzoomimplementsimagescale{
publicnearnaighborzoom(){
}
/**
*(x-xmin)/(xmax-xmin)=(y-ymin)/(ymax-ymin)
*assumexminandyminarezero,thentheformulawillbef(x)=kx(k-coefficent,slope)
*
*/
@override
publicint[]imgscale(int[]inpixelsdata,intsrcw,intsrch,intdestw,intdesth){
int[][][]inputthreedeminsiondata=processonetothreedeminsion(inpixelsdata,srch,srcw);
int[][][]outputthreedeminsiondata=newint[desth][destw][4];
floatrowratio=((float)srch)/((float)desth);
floatcolratio=((float)srcw)/((float)destw);
for(introw=0;row<desth;row++){
//converttothreedimensiondata
intsrcrow=math.round(((float)row)*rowratio);
if(srcrow>=srch){
srcrow=srch-1;
2
}
for(intcol=0;col<destw;col++){
intsrccol=math.round(((float)col)*colratio);
if(srccol>=srcw){
srccol=srcw-1;
}
outputthreedeminsiondata[row][col][0]=inputthreedeminsiondata[srcrow][srccol][0];//alpha
outputthreedeminsiondata[row][col][1]=inputthreedeminsiondata[srcrow][srccol][1];//red
outputthreedeminsiondata[row][col][2]=inputthreedeminsiondata[srcrow][srccol][2];//green
outputthreedeminsiondata[row][col][3]=inputthreedeminsiondata[srcrow][srccol][3];//blue
}
}
returnconverttoonedim(outputthreedeminsiondata,destw,desth);
}
/*<p>thepurposeofthismethodistoconvertthedatainthe3darrayofintsbackinto</p>
*<p>the1darrayoftypeint.</p>
*
*/
publicint[]converttoonedim(int[][][]data,intimgcols,intimgrows){
//createthe1darrayoftypeinttobepopulatedwithpixeldata
int[]onedpix=newint[imgcols*imgrows*4];
//movethedataintothe1darray.notethe
//useofthebitwiseoroperatorandthe
//bitwiseleft-shiftoperatorstoputthe
//four8-bitbytesintoeachint.
for(introw=0,cnt=0;row<imgrows;row++){
for(intcol=0;col<imgcols;col++){
onedpix[cnt]=((data[row][col][0]<<24)&0xff000000)
|((data[row][col][1]<<16)&0x00ff0000)
|((data[row][col][2]<<8)&0x0000ff00)
|((data[row][col][3])&0x000000ff);
cnt++;
}//endforlooponcol
}//endforlooponrow
returnonedpix;
}//endconverttoonedim
privateint[][][]processonetothreedeminsion(int[]onedpix2,intimgrows,intimgcols){
int[][][]tempdata=newint[imgrows][imgcols][4];
for(introw=0;row<imgrows;row++){
//perrowprocessing
int[]arow=newint[imgcols];
for(intcol=0;col<imgcols;col++){
intelement=row*imgcols+col;
arow[col]=onedpix2[element];
}
//converttothreedimensiondata
for(intcol=0;col<imgcols;col++){
tempdata[row][col][0]=(arow[col]>>24)&0xff;//alpha
tempdata[row][col][1]=(arow[col]>>16)&0xff;//red
tempdata[row][col][2]=(arow[col]>>8)&0xff;//green
tempdata[row][col][3]=(arow[col])&0xff;//blue
}
}
returntempdata;
}
雙線性插值算法代碼intx=(i+0.5)*m/a-0.5
inty=(j+0.5)*n/b-0.5
代替
intx=i*m/a
inty=j*n/b
所述雙立方插值算法的java源代碼如下:
本發(fā)明所達到的有益效果是:該方案是一種實現(xiàn)病案高清掃描的方法,該方案采用高拍儀進行紙質病案掃描,掃描后的病案圖片將以文件的形式存儲到服務器上,后臺采用最臨近點插值算法、雙線性插值算法、雙立方插值算法、最臨近點插值縮放等多種算法對掃描圖片進行處理,保證掃描件的高清晰度。
最后應說明的是:以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,盡管參照前述實施例對本發(fā)明進行了詳細的說明,對于本領域的技術人員來說,其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換。凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。