From help-octave-request at bevo dot che dot wisc dot edu Sat Dec 11 10:23:46 1999 Subject: Re: How do I read an image into octave? From: etienne grossmann To: help-octave at bevo dot che dot wisc dot edu, Alasdair.McAndrew@vu.edu.au Date: Sat, 11 Dec 1999 11:53:33 +0000 (WET) Hello # I've just successfully compiled octave under linux; I'd like to use it Hurra! # to test some image processing algorithms. But according to the info # pages, images must be in octave's "img" format. This is all very # well, but how do I get a pgm/tif/gif/png image into that format? Are # there any file handling routines which will take, say, a 256 grey level # pgm image and produce a matrix in octave? # In other word, is there an octave equivalent to MATLAB's "imread" # command? Not that I know of. I am sending you at the end of this mail two functions : "loadpgm.m" and "savepgm.m". I also have a tentative "saveppm.m" (I don't really know how ppm's are coded, but it seems to work). I know, this is not the right list for code, but maybe Alasdair doesn't subscribe to octave-source. If you're interested, I wrote a "bwlabel.m" function (finds disctinct connex regions in a 0-1 image) and a "bwborder.m" function (finds the border of regions in a 0-1 image). These little functions are quite useful, but not a substitute for general image loading/writing/manipulating tools. With a good amount of work, it should be possible to glue an image library onto octave. That would require learning a good deal of octave internals (I've chickened out of "liboctave") and the interface to, say, "imlib", "the gimp" or some other image tool. Cheers, Etienne --[[application/octet-stream Content-Disposition: attachment; filename="loadpgm.m"][base64]] ZnVuY3Rpb24gaW0gPSBsb2FkcGdtKGltbmFtZSkKCiMjIEkgc3VwcG9zZSBQR00gZmlsZXMg aGF2ZSBmb3JtYXQKIyMKIyMgUDU8bmV3bGluZT4KIyMgPG9wdGlvbmFsIGNvbW1lbnQ+PG5l d2xpbmU+CiMjIDxudW1iZXI+PHNlcGFyYXRhdG9yPgojIyA8bnVtYmVyPjxzZXBhcmF0YXRv cj4KIyMgPG51bWJlcj48c2VwYXJhdGF0b3I+CiMjIDxpbWFnZSBkYXRhPgojIwojIyBJcyB0 aGF0IGNvcnJlY3Q/IAojIyA8c2VwYXJhdG9yPiA9IHNwYWNlIG9yIG5ld2xpbmUKIyMgVGhl IHRocmVlIG51bWJlcnMgYXJlIHdpZHRoLCBoZWlnaHQgYW5kIGdyZXlsZXZlbHMuIFRoZSB0 aGlyZAojIyBudW1iZXIgaXMgYXNzdW1lZCB0byBiZSAyNTUKCltmaWQsbXNnXT0gZm9wZW4o aW1uYW1lLCJyIik7CgppbSA9IG5hbjsKCmlmIGZpZCA9PSAtMSAsCiAgcHJpbnRmKCJsb2Fk cGdtIDogY2Fubm90IG9wZW4gXCIlc1wiXG4iLGltbmFtZSkgOwogIHJldHVybgplbmQKCgpb ZGF0YSwgY291bnRdID0gZnJlYWQgKGZpZCkgOwkjIFJlYWQgdGhlIHdob2xlIGZpbGUKZmNs b3NlKGZpZCkgOwkJCSMgQ2xvc2UgdGhlIGZpbGUKCmVvbGluID0gIFswLGZpbmQoIGRhdGEg PT0gMTAgKSddIDsKIyMgU2VwYXIgaXMgbXVjaCBiaWdnZXIgdGhhbiBJIG5lZWQgLi4uCnNl cGFyID0gIFswLGZpbmQoIGRhdGEgPT0gMTAgfCBkYXRhID09IDMyICknXSA7CmlmIGxlbmd0 aChzZXBhcik9PTEsCiAgcHJpbnRmKCJsb2FkcGdtIDogZmlsZSAlcyBpcyBub3QgaW4gcGdt IGZvcm1hdFxuIixpbW5hbWUpIDsKICByZXR1cm4KZW5kCmxpbmNudCA9IDEgOwkJCSMgTGlu ZSBhbmQgc2VwYXJhdG9yIGNvdW50ZXJzCnNlcGNudCA9IDEgOwoKCQkJCSMgUmVhZCBmaXJz dCBsaW5lCmZpcnN0bGluZSA9IHNldHN0cihkYXRhKHNlcGFyKHNlcGNudCkrMTpzZXBhcihz ZXBjbnQrMSktMSkpJyA7CgoJCQkJIyBDaGVjayBmb3IgUDUKaWYgISBzdHJjbXAoIGZpcnN0 bGluZSgxOjIpICwgIlA1IiApICwKICBwcmludGYoImxvYWRwZ20gOiBmaWxlICVzIGlzIG5v dCBpbiB0aGUgcmlnaHQgcGdtIGZvcm1hdFxuIixpbW5hbWUpIDsKICBwcmludGYoIiAgIGxv YWRwZ20gb25seSByZWFkcyBQNVxuIikgOwogIHJldHVybgplbmQKc2VwY250KysgOwoKCQkJ CSMgU2V0IHRoZXNlIHZhcmlhYmxlcyA6IAoJCQkJIyB3aWR0aCwgaGVpZ2h0LCBudW1iZXIg b2YgZ3JleWxldmVscy4gCnZhcm5hbWVzID0gWyJpbXciOyJpbWgiOyJpbWwiXSA7CmZvciBp ID0gMTpzaXplKHZhcm5hbWVzLDEpICwKICBmaXJzdGxpbmUgPSBzZXRzdHIoZGF0YShzZXBh cihzZXBjbnQpKzE6c2VwYXIoc2VwY250KzEpLTEpKScgOwogIHNlcGNudCsrIDsKCQkJCSMg U2tpcCBjb21tZW50cwogIHdoaWxlIHRvYXNjaWkoZmlyc3RsaW5lKDEpKSA9PSAzNSAsICMg MzUgPT0gdG9hc2NpaSgiIyIpCiAgICBsaW5jbnQgPSBtaW4oIGZpbmQoIGVvbGluID4gc2Vw YXIoc2VwY250KSsxICkgKSA7ICMgTmV4dCBsaW5lCiAgICAKICAgICMjIFRoaXMgc2VlbXMg dG8gd29yayB0b28uIE1heWJlIGl0J3Mgb25seSBpbiAyLjEuWFgKICAgICMjIGxpbjIgPSBm aW5kKCBlb2xpbiA+IHNlcGFyKHNlcGNudCkrMSApKDEpICA7ICMgTmV4dCBsaW5lOwogICAg IyMgaWYgbGluY250IT1saW4yLCBwcmludGYoIldob2EhISBCYWQgdHJ5ICgxKVxuIik7IGVu ZAogICAgCiAgICAjIyBJIHdpc2ggSSBjb3VuZCB1c2UgImluZGV4IiAKICAgICMjIGxpbjIg PSBpbmRleCggZW9saW4gPiBzZXBhcihzZXBjbnQpKzEsIDEgKTsKICAgICMjIGlmIGxpbmNu dCE9bGluMiwgcHJpbnRmKCJXaG9hISEgQmFkIHRyeSAoMSlcbiIpOyBlbmQKCiAgICBzZXBj bnQgPSBtaW4oIGZpbmQoIHNlcGFyID49IGVvbGluKGxpbmNudCkgKSApICA7ICMgTmV4dCBz ZXAKCiAgICAjIyBzZXAyID0gaW5kZXgoIGVvc2VwID49IGVvbGluKGxpbmNudCkrMSwgMSAp OwogICAgIyMgaWYgc2VwY250IT1zZXAyLCBwcmludGYoIldob2EhISBCYWQgdHJ5ICgyKVxu Iik7IGVuZAoKICAgIGZpcnN0bGluZSA9IHNldHN0cihkYXRhKHNlcGFyKHNlcGNudCkrMTpz ZXBhcihzZXBjbnQrMSktMSkpJyA7CiAgICBzZXBjbnQrKyA7CiAgZW5kCiAgZXZhbCggc3By aW50ZigiJXM9JXM7Iix2YXJuYW1lcyhpLDopLGZpcnN0bGluZSApICkgOwplbmQKCmltID0g cmVzaGFwZSggZGF0YSggc2VwYXIoc2VwY250KSsxOmxlbmd0aCggZGF0YSApKSwgaW13LGlt aCApIDsKIyMga2V5Ym9hcmQK --[[application/octet-stream Content-Disposition: attachment; filename="savepgm.m"][base64]] IyMgICAgICAgc2F2ZXBnbShmbmFtZSxpbSkKIyMKIyMgU2F2ZXMgaW1hZ2UgImltIiBpbiBm aWxlICJmbmFtZSIgaW4gUEdNIGJpbmFyeSBmb3JtYXQuCmZ1bmN0aW9uIHNhdmVwZ20oZm5h bWUsaW0pCgogIApbZmlkLG1zZ10gPSBmb3BlbihmbmFtZSwidyIpOwkJCQkjIFNhdmluZy4K aWYgZmlkID09IC0xICwgCiAgZXJyb3Ioc3ByaW50ZigidW5hYmxlIHRvIG9wZW4gJXNcbkVy cm9yIG1zZyBpcyA6JXMiLGZuYW1lLG1zZykpOwplbmQKCltoLHddPXNpemUoaW0pOwoKZnBy aW50ZihmaWQsIlA1XG4jIENyZWF0b3Igb2N0YXZlLHNhdmVwZ20ubVxuJWQgJWRcbjI1NVxu Iix3LGgpOwpjb3VudCA9IGZ3cml0ZSAoZmlkLCBpbScgKTsKZmNsb3NlKGZpZCk7 ----------------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.che.wisc.edu/octave/octave.html How to fund new projects: http://www.che.wisc.edu/octave/funding.html Subscription information: http://www.che.wisc.edu/octave/archive.html -----------------------------------------------------------------------