matlip: matlab-like language for image processing pin-chin huang...

Post on 13-Jan-2016

224 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

MATLIP: MATLAB-Like Language for Image Processing

Pin-Chin Huang (ph2249@columbia.edu)Shariar Zaber Kazi (szk2103@columbia.edu)

Shih-Hao Liao (sl2937@columbia.edu)PoHsu Yeh (py2157@columbia.edu)

Motivation• Easy to code Easy to access pixels of an image Easy to do image arithmetic operation Easy to do image convolution Easy to assign images of any size Easy to debug

• No cost for license

• Good Portability

Easy to access one pixel of an image

function = main() image x; x=imread("./rabbit.jpg"); print(x[1,1,"RGB"]);end

public 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 operation

function = main() image x; image y; x=x+1; x=x-1; x=x*1; x=x/1; x=x+y;end

public 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 convolution

function = main() image x; kernel k; x=x@k;end

public 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 size

function = 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 debug

function = main() int i; for i=0:(int y):100 x=x+1; end y=0;end

syntax 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 debug

function int m = test () endfunction = main () int x; x=1; test(x);end

Fatal 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 Toolbox 6.2 (MATLAP)• Individual License

For: End userActivation types: Standalone named user or designated computer

• $1,000• Buy

Request a Quote (via fax or e-mail)Contact Sales

• For an end user who wants to personally install, administer, and operate the software.

• Group License For: WorkgroupActivation Types: Standalone named users or designated computers

• Request a Quote (via fax or e-mail)Contact Sales

• For organizations who would like to designate an administrator to manage a group of Individual licenses.

Tutorial introduction

• Variable 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 Operation

Int 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;end

image 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 Statement

int 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;endend

int x;funciton=main()x=1;If x==1 x=x+1;endend

Int x;function=main()x=1;if x==1x=x+1;elseif x==2x=x+2;end

Int x;function=main()x=1;if x==1x=x+1;else x=x+2;end

Control Flow Statement

function = main()int x;int i;for i=0:1:10 x=x+1;endend

function = main()Int x;while x<3 x=x+1;endend

Function

function = test()end function main()test();end

function 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

Recursion

function 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 endend

function = 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-1

ret[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 Detection

kernel 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");end

function = 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 learned

• Whenever changes are made, do regression test immediately.

• Try to come up with a complete test suite before language design

• Use Version Control System• Try to finish the grammar before

implementation

top related