# 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

TRANSCRIPT

• 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)

• 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

Good Portability

• 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){

}

26 lines of java code

• 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){}

150 lines of java code

• 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){.}

45 lines of java code

• 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

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){}

50 lines of java code

• 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

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

• 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)

Fatal error: exception Failure("Cannot concatenate image type with string type in function: 'main'")

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

• 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.

• 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);

• 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

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

• 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

• Control Flow Statementfunction = main()int x;int i;for i=0:1:10 x=x+1;end endfunction = main()Int x;while x
• Functionfunction = test()end function main()test();endfunction main()Int d;d=test();Endfunction int m= test()end

function int m= test(int x) m=d;end function main()Int d;d=test(d);end

• Recursionfunction int m = foo (int x) if(x > 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

• Example (Flip the image vertically)

• 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

function = main() image x; image y; x=imread("./rabbit.jpg"); imshow(x); y=flip(x); imshow(y); end

• Example (Flip the image vertically)

• 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

• Example (Flip the image horizontally)

• 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

• Example (Blur the image)

• 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];

x=imread("./rabbit.jpg"); imshow(x); y=x@k@k; imshow(y); imsave(y,"./r4.gif");end

• Example (Sharpen the image)

• 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

• Example (Inverse the image)

• 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

• Example (Rotate the image 900)

• 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"] < 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

• Edge Detection

• Architectural diagram

• 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