MATLIP: MATLAB-Like Language for Image Processing Pin-Chin Huang (ph2249@columbia.edu)ph2249@columbia.edu Shariar Zaber Kazi (szk2103@columbia.edu)szk2103@columbia.edu.

Download MATLIP: MATLAB-Like Language for Image Processing Pin-Chin Huang (ph2249@columbia.edu)ph2249@columbia.edu Shariar Zaber Kazi (szk2103@columbia.edu)szk2103@columbia.edu.

Post on 13-Jan-2016

218 views

Category:

Documents

4 download

Embed Size (px)

TRANSCRIPT

<ul><li><p>MATLIP: MATLAB-Like Language for Image ProcessingPin-Chin Huang (ph2249@columbia.edu)Shariar Zaber Kazi (szk2103@columbia.edu)Shih-Hao Liao (sl2937@columbia.edu)PoHsu Yeh (py2157@columbia.edu)</p></li><li><p>MotivationEasy to codeEasy to access pixels of an imageEasy to do image arithmetic operationEasy to do image convolutionEasy to assign images of any sizeEasy to debugNo cost for license</p><p>Good Portability </p></li><li><p>Easy to access one pixel of an imagefunction = main() image x; x=imread("./rabbit.jpg"); print(x[1,1,"RGB"]);endpublic static void main(String[] args){BufferedImage x = imnew(100, 100, "RGB");x = imread("./rabbit.jpg");System.out.println(getImagePixel(x, 1, 1, "RGB"));}static int getImagePixel(BufferedImage im, int col, int row, String channel){</p><p>}</p><p>26 lines of java code</p></li><li><p>Easy to do image arithmetic operationfunction = main() image x; image y; x=x+1; x=x-1; x=x*1; x=x/1; x=x+y;endpublic static void main(String[] args){BufferedImage x = imnew(100, 100, "RGB");BufferedImage y = imnew(100, 100, "RGB");x = imread("./rabbit.jpg");x = (BufferedImage)clone((BufferedImage)doArithmetic(x, 1, OPERATION.ADD));x = (BufferedImage)clone((BufferedImage)doArithmetic(x, 1, OPERATION.SUB));x = (BufferedImage)clone((BufferedImage)doArithmetic(x, 1, OPERATION.MUL));x = (BufferedImage)clone((BufferedImage)doArithmetic(x, 1, OPERATION.DIV));x = (BufferedImage)clone((BufferedImage)doArithmetic(x, y, OPERATION.ADD));}static Object doArithmetic(Object op1, Object op2, OPERATION op){}static Object clone(Object src){}</p><p>150 lines of java code</p></li><li><p>Easy to do image convolutionfunction = main() image x; kernel k; x=x@k;endpublic static void main(String[] args){BufferedImage x = imnew(100, 100, "RGB");Kernel k = kernelinit();x = (BufferedImage)clone(convolve(x, k));}static BufferedImage convolve(BufferedImage im, Kernel k){.}static Object clone(Object src){.}</p><p>45 lines of java code</p></li><li><p>Easy to assign image to image of different sizefunction = main() image a; image b; a = imnew(300,300,"RGB"); b = imnew(200,200,"RGB"); a=b; end</p><p>public static void main(String[] args){BufferedImage a = imnew(100, 100, "RGB");BufferedImage b = imnew(100, 100, "RGB");a = imnew(300, 300, "RGB");b = imnew(200, 200, "RGB");a = (BufferedImage)clone(b); }static BufferedImage imnew(int width, int height, String type){..}static Object clone(Object src){}</p><p>50 lines of java code</p></li><li><p>Easy to debugfunction = main() int i; for i=0:(int y):100 x=x+1; end y=0;endsyntax error in line #3Fatal error: exception Parsing.Parse_error</p><p>Fatal error: exception Failure("Type mismatch in argument passing between: 'x', type: int and 'x', type: float in function: 'test')function int m = test (int x) endfunction = main () float x; x=1.0; test(x);end</p></li><li><p>Easy to debugfunction int m = test () endfunction = main () int x; x=1; test(x);endFatal error: exception Failure(Wrong number of arguments passed to function: test)</p><p>Fatal error: exception Failure("Cannot concatenate image type with string type in function: 'main'")</p><p>function = main() image x; imshow(x); x = imread("./rabbit.jpg"+x); imshow(x); imsave(x,"./rabbit.jpg"); x = imnew(300,300,"RGB"); imshow(x);end</p></li><li><p>No cost for licenseImage Processing Toolbox6.2 (MATLAP)Individual License For: End user Activation types: Standalone named user or designated computer$1,000Buy Request a Quote(via fax or e-mail) Contact SalesFor an end user who wants to personally install, administer, and operate the software.Group License For: Workgroup Activation Types: Standalone named users or designated computersRequest a Quote(via fax or e-mail) Contact SalesFor organizations who would like to designate an administrator to manage a group of Individual licenses.</p></li><li><p>Tutorial introductionVariable declaration and assignment:int a;float b;boolean c;kernel k;image i;function = main()a=1;b=0.1;c=true;k=kernelnew(10,10);k=[0.0,0.1;0.3,0.4];i=imnew(10,10,RGB);end int a=3;float b=0.3;boolean c =true;Kernel k=kernelnew(10,10);Image i=imnew(10,10,RGB);</p></li><li><p>Arithmetic OperationInt a;Int b;float c;float d;funciton = main()a=a+b;a=a-b;a=a*b;a=a/b;a=a^b;a=mod(a,b);c=c+d;c=c-d;c=c*d;c=c/d;endimage a;image b;int c;function =main()a=a+b;a=a-b;a=a*b;a=a/b;a=a*2+b;a=a*c+b;a=a*2.0; (NOT OK)a=2*a;(NOT OK)end</p><p>kernel k1;kernel k2;float a;function = main()k1=k1+k2;k1=k1-k2;k1=k1*k2;k1=k1/k2;k1=k1*2.0+k2;k1=k1*a+k2;k1=k1*2+k2;(NOT OK)k1=2.0*k1+k2;(NOT OK)end</p></li><li><p>Control Flow Statementint x;function=main()x=1;If x==1 x=x+1;elseif x==2 x=x+2;elseif x==3 x=x+3;else x=x+4;endendint x;funciton=main()x=1;If x==1 x=x+1;endendInt x;function=main()x=1;if x==1x=x+1;elseif x==2x=x+2;endInt x;function=main()x=1;if x==1x=x+1;else x=x+2;end</p></li><li>Control Flow Statementfunction = main()int x;int i;for i=0:1:10 x=x+1;end endfunction = main()Int x;while x</li><li><p>Functionfunction = test()end function main()test();endfunction main()Int d;d=test();Endfunction int m= test()end </p><p>function int m= test(int x) m=d;end function main()Int d;d=test(d);end</p></li><li><p>Recursionfunction int m = foo (int x) if(x &gt; 0) m=foo(x-1); else m=-1; endendfunction int m = bar (int x) m=x+1;endfunction = main() print(foo(bar(foo(5))));end</p></li><li><p>Example (Flip the image vertically)</p></li><li><p>Example (Flip the image vertically)function image ret = flip(image im)int height;int width;int i;int j;height = getheight(im);width = getwidth(im);ret=imnew(width,height,"RGB");for j=0:height-1 for i=0:width-1 ret[i,height-j-1,"rgb"]=im[i,j,"rgb"]; endendend</p><p>function = main() image x; image y; x=imread("./rabbit.jpg"); imshow(x); y=flip(x); imshow(y); end</p></li><li><p>Example (Flip the image vertically)</p></li><li><p>Example (Flip the image horizontally)function image ret = flip(image im) int height; int width; int i; int j; height = getheight(im); width = getwidth(im); ret=imnew(width,height,"RGB"); for j=0:height-1 for i=0:width-1 ret[width-i-1,j,"rgb"] = im[i,j,"rgb"]; end endendfunction = main() image x; image y; x=imread("./rabbit.jpg"); imshow(x); y=flip(x); imshow(y);end</p></li><li><p>Example (Flip the image horizontally)</p></li><li><p>Example (Blur the image)function = main() image x; image y; kernel k; k= [0.25,0.0,0.25;0.0,0.0,0.0;0.25,0.0,0.25]; x=imread("./rabbit.jpg"); #x=togray(x); imshow(x); y=x@k@k@k@k@k@k@k; imshow(y); imsave(y,"./r3.gif"); end</p></li><li><p>Example (Blur the image)</p></li><li><p>Example (Sharpen the image)function = main() image x; image y; kernel k; k= [0.0,-1.0,0.0;-1.0,5.0,-1.0;0.0,-1.0,0.0];</p><p> x=imread("./rabbit.jpg"); imshow(x); y=x@k@k; imshow(y); imsave(y,"./r4.gif");end</p></li><li><p>Example (Sharpen the image)</p></li><li><p>Example (Inverse the image)function = main() image x; int i; int j; int width; int height; x=imread("./rabbit.jpg"); width=getwidth(x); height=getheight(x); imshow(x); for j=0:height-1 for i=0:2:width-1 x[i,j,"R"] = 255-x[i,j,"R"]; x[i,j,"G"] = 255-x[i,j,"G"]; x[i,j,"B"] = 255-x[i,j,"B"]; end end imshow(x);end</p></li><li><p>Example (Inverse the image)</p></li><li><p>Example (Rotate the image 900)function image ret = rotate90(image im) int height; int width; int i; int j; height = getheight(im); width = getwidth(im); ret=imnew(height,width,"RGB"); for j=0:height-1 for i=0:width-1ret[height-j-1,i,"rgb"] = im[i,j,"rgb"]; end endendfunction = main() image x; image y; x=imread("./rabbit.jpg"); imshow(x); y=rotate90(x);end</p></li><li><p>Example (Rotate the image 900)</p></li><li><p>Edge Detectionkernel k;int i;int j;function image m=edge(image b,kernel k) imshow(b); b = b@k; for i=0:getheight(b) for j=0:getwidth(b) if b[j,i,"grey"] &lt; 0 b[j,i,"grey"] = -b[i,j,"grey"]; end end end imshow(b); imsave(b,"./lena_edge.jpg");endfunction = main() image a; image b; a = imread("./lena_color.jpg"); b = togray(a); k = [-5.0, 0.0, 0.0; 0.0, 0.0, 0.0; 0.0, 0.0, 5.0]; edge(b,k); end</p></li><li><p>Edge Detection</p></li><li><p> Architectural diagram</p></li><li><p>Lesson learnedWhenever changes are made, do regression test immediately.Try to come up with a complete test suite before language designUse Version Control SystemTry to finish the grammar before implementation</p></li></ul>