Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Physical ASCII mosaic

165 views
Skip to first unread message

Eric Harshbarger

unread,
Jan 25, 2002, 7:32:19 PM1/25/02
to

Hi all, thought some of you might get a kick out of this project I just
finished. A large ASCII mosaic constructed of tiny plastic letter
bricks:

http://www.ericharshbarger.org/lego/calista.html

cheers,

eric

--
----------------------------------------------------------------------
Eric Harshbarger / er...@ericharshbarger.org / www.ericharshbarger.org

"Oh please, if people are going to start telling the truth around
here... I'm going to bed." - Jackie-O (Parker Posey, THE HOUSE OF YES)
----------------------------------------------------------------------

Scrounge Weasel

unread,
Jan 25, 2002, 9:58:05 PM1/25/02
to
"Eric Harshbarger" <er...@ericharshbarger.org> wrote in message
news:3C51F913...@ericharshbarger.org...
<snip>
> http://www.ericharshbarger.org/lego/calista.html
<snip>

That is extremely, exceptionally cool, no matter what "Dr. Square" says
about using programs to help you. I'm just shocked it was completed in only
four months!

Very well done.


badstyle

unread,
Jan 26, 2002, 9:17:15 AM1/26/02
to
good stuff :)

..B..

"Eric Harshbarger" <er...@ericharshbarger.org> wrote in message
news:3C51F913...@ericharshbarger.org...
|

CeeJay

unread,
Jan 26, 2002, 11:27:36 AM1/26/02
to
> Hi all, thought some of you might get a kick out of this project I just
> finished. A large ASCII mosaic constructed of tiny plastic letter
> bricks:
>
> http://www.ericharshbarger.org/lego/calista.html

Very fun reading .. I enjoyed lots of his other works too and works by other
LEGO modellers like f.x. the Alien on this page:

http://community-1.webtv.net/craigo-lego/scificraigolego/


Now that we are in too good geeky links that have something to do with
ascii-art, check this page :

http://www.ai.mit.edu/~jsd/Projects/ImagesToText/

Jeremy S. De Bonet is a student at MIT .. and one of the many complex projects
he have done is a image to text algorithm.
I think the edge tracing algorithm shows promised allthough you can tell from
it's output which uses a very basic set of characters that Jeremy is no
ascii-artist , but rather a skilled programmer.

I think that had he read my ascii-art tutorial, and in particular had he seen my
sun of directions ..

(recap)
1/3 | 1/3
1/2 | | | 1/2
1/1 | | | | | 1/1
3/2 \ `. `. | ,' ,' / 3/2
2/1 \ \ | | | | | / / 2/1
. `. \ `. | | | ,' / ,' ,
3/1 `. \ \ | `. | ,' | / / ," 3/1
. `. `. \ `. | | | ,' / ,' ," ,
4/1 `-. `. \ \ | | | | | / / ," ,-" 4/1
-._ `-. `. `. \ `. `.|,' ,' / ,' ," ,-" _.-
5/1 `-._ `-. `. \ \ | ||| | / / ," ,-" _.-" 5/1
`--._ `-._ `-. `. `. \ `. ||| ,' / ,' ," ,-" _.-" _.--"
6/1.__ `--._ `-._ `-. `. \ / ," ,-" _.-" _.--" __.6/1
`--.__ `--._ `-._` _____ "_.-" _.--" __.--"
7/1 `--..__ `--.__ `--._ .-' `-. _.--" __.--" __..--" 7/1
--..__ `--..__ `--.__ ,' `. __.--" __..--" __..--
8/1 ``--..__ `--..__ / _ _ \ __..--" __..--'" 8/1
``--..__ ; (_) (_) : __..--'"
----------------------- | | ------------------------
..--''"" : | | ; ""``--..
8/1 ..--''"" .--''"" \ `.___.' / ""``--. ""``--.. 8/1
--''"" .--''"" .--'"" `. ,' ""`--. ""``--. ""``--
7/1 .--''"" .--'"" ,--' `-._____.-' CJ ``--. ""`--. ""``--. 7/1
.--'"" ,--'" _,-". . `-._ ``--. ""`--.
6/1'"" ,--'" _,-" .-' ,' / \ `. `-. `-._ ``--. ""`6/1
,--'" _,-" .-' ,' .' / .' ||| `. \ `. `. `-. `-._ ``--.
5/1" _,-" .-' ,' / / | ||| | \ \ `. `-. `-._ 5/1
,-" .-' ,' .' / .' .'|`. `. \ `. `. `-. `-.
4/1 .-' ,' / / | | | | | \ \ `. `-. 4/1
' ,' .' / .' | | | `. \ `. `. `
3/1 ,' / / | .' | `. | \ \ `. 3/1
' .' / .' | | | `. \ `. `
2/1 / / | | | | | \ \ 2/1
3/2 / .' .' | `. `. \ 3/2
1/1 | | | | | 1/1
1/2 | | | 1/2
1/3 | 1/3


.. he would have had a better understanding of asciilines and could have made a
much better algoritm.

From a different point of view his algorithm is the only edgetracing image to
ascii algorithm i have seen , and is a good showcase of this approach - it also
proves that it was right when I first suggested to Markus that a edgetracer
would be a good idea.
I would certainly like to see how this edgetracer handles the
testsuite/competition at :
http://www.jave.de/image2ascii/competition2001/contributions.html

( BTW .. we really should submit some more contributions - It would be nice to
compare more tools ..
This may seem pointless at the time because people all seem to know that JavE
does the best conversions ( http://www.jave.de/ ) but stick with it .. the point
was not just to find the best converter but also to learn from each and improve
the tools )

Hmmm .. I'm going to CC this to Jeremy Bonet - maybe he will try his algorithm
on the testsuite or even better explain the algorithm in details or even show
some sourcecode

Check out rest of Jeremy's site btw .. in particular the Imagemosaics and the
stuff about texture synthesis was very interesting to me.

Hey Jeremy ! How about releasing some working tools for the public to download
and use ? Let the world gain from your research :)

Kind Regards
CeeJay


Markus Gebhard

unread,
Jan 26, 2002, 3:59:33 PM1/26/02
to
Hi CeeJay,

CeeJay wrote:
[...]


> Now that we are in too good geeky links that have something to do with
> ascii-art, check this page :
>
> http://www.ai.mit.edu/~jsd/Projects/ImagesToText/

> From a different point of view his algorithm is the only edgetracing image to
> ascii algorithm i have seen , and is a good showcase of this approach - it also
> proves that it was right when I first suggested to Markus that a edgetracer
> would be a good idea.

[...]


> Hmmm .. I'm going to CC this to Jeremy Bonet - maybe he will try his algorithm
> on the testsuite or even better explain the algorithm in details or even show
> some sourcecode

I agree: the edge traced images are cool. Also the algorithm is quite
simple:

FOR ALL PIXELS x,y IN THE IMAGE DO:
IF ISSET(x,y)
IF NOTSET(x-1,y) AND NOTSET(x,y-1) PRINT /
ELSEIF NOTSET(x+1,y) AND NOTSET(x,y-1) PRINT \
ELSEIF NOTSET(x-1,y) AND NOTSET(x,y+1) PRINT \
ELSEIF NOTSET(x+1,y) AND NOTSET(x,y+1) PRINT /
ELSEIF NOTSET(x,y+1) PRINT _
ELSEIF NOTSET(x-1,y) OR NOTSET(x+1,y) PRINT |
END
ELSEIF ISSET(x,y+1) AND ISSET(x-1,y+1) AND ISSET(x+1,y+1) PRINT _
END
END

The results are somewhat funny:
_________
_________ _/ \_
_/ \_/__/ __\
/________ / \
/ | |
__/ _ \
/ / \ _ \
_/ _ / | | \_ |
/ __/ | | \ | \_/
|__/ / / \__ |
\ | | \_/
/ |
| /
/ |
/ /
| |
| |
| |
| |
| |
| |
/ |
| |_
/______\
______/ \______
__/ \___
__/ \_
_/ \_
/ \_
/ _______________ \
/ _/ \_ \
/ / \ \
/ / \ \
/ | | \
/ | \_ \
_/ / \__ \
/ | | |__/\
| | _| \
/ | ____ _/\_________/ |
| \_/ \ / _ |
/ _ ___ \ / _/ \_ _____ |
| / \ | / | | \___/ | |
_| | \/ \_/ | |
/ | / |
| \ / |
| | _/ |
| \ ____ / |
| | / \ / |
| \ /_ |___ / |
| | | \ | |
| \ / / _| |
| \_ \_____/ _/ |
| \_ /__/ |
| \_ __| |
| \_____/ |
\ |
| |
/ __ |
| | \_ |
| | \__ ____ |
| \ \______/ \ |
| ___/ \_ |
| _/ \ |
| ___/ | |
| / / |
| / | |
| / | |
| | / |
\__________/ \_______________/

/ \_ ________ _/ \
\_ \__ / ______\ __/ _/
\_ \ \_/ / _/
\_ \_ _/ _/
\_ \ / _/
\_/ ________ \_/
_ /______ \ _
/ \ ______| \ / \
| | _/ | | /
| | / _______ | ||
| / / |_______| | ||
\/ \ | \/
___ \__________/ __
_/ _\ / \__
/ _/ \_ \
_/ / ________ \_ \_
_/ _/ /________\ \_ \_
/ _/ \_ \
\_/ \_/

/_ __ _________________ _____ __ _ _ __ __________________ _\
| \ |/ _ _______ || | || |/ \| |/ \ |
|\ |_/ \_/ _ \ || \\_|| | | | /|
| \__________/ \/ \/ / \__/ \\ // \\ / /\_/ |
| ____________ _ _______ /__ / |
| / \ / \__ / \_ \ |
| \____ ____/ \_ \___ /___ \ |
| / | | \___ \__ | __ \ / |
| /_\ | | _______| \___ / | \ | \ |
| | | / \___| / | |_ |
| | | \______ _ |__/_| \ / |
| / | | _| ___/ \ \ /_\ |
| \ | | __/ ___/ | _________ | |
| ____| |____ / __/ _/ / _| \_ |
| / \ /___/ / |_/\ / \ |
| _/ / ___________/ /________\ /________\ |
| / | \/ |
| \_\ /\ _______ ____ /\ /\ / / |
|\ | / _ \ /\ /\ / /\ /\ / _ _\ || | /\ / | /|
|_/_________|\__|_| |_||__|\_|\_||_||_||_|_|____||_|\__/__|\_/_|
\_________________________________________________________________/

But this is no good point for starting a _real_ edge detection
algorithm. Anyway, may investigations on that topic show that chances
are very low for edge detection being the key to better image2ascii
algorithms.

Look at this example:
______________
__/ _ \__
__/ / | _ \__
_/ |_/ |_|___ \
/ _ _/ \__ \_
/ / | | _| \
/ |_/ |______/ \
/ \_
/ ________________ \
| _/ \__ |
|_ | \ |
\ | \ | \
/ | | |
| |__ |___ |
| \___ ________ | |/
\ \ / \ \ \
\ __ | \___ _/
\ ______/ || \__/
\_ | ||
| \ / |
\ \ / |
| \____| \__/ /\
\ ____/ ___//
| |______ /___/
/ \
/ ___/
_/ __/ _/\
_/ |_______/ |____
__/ \_____
__/ \______
__/ \__
__/ \
__/ |
__/ |
/ |
/ |
| |
\___________________________________________________________________/

Even if it was rendered with a more detailed line style - there is no
way to mix the result with greyscale Ascii-Art:
.... ..
....zzz=73v0czxx..
..`Jzxx==:`.z?=....`::,.
.......cv0Or`...JnZ:`...a=::..
.`:=,?v4Gsz:``aJxav..a`````.zvz=.
`.,..,:zvv=``.?#XQAx=` ````:=..
``,usaJv0=,`.`v0v4QQ+` .......czxx=`
.....a=vOUXna.`...v`4SSxuwZc:..`==vvv==,
``.a:aowwxOxsxvv0U0:`vO000V000vv:`:vO00On:`.
`|:v4X###UU0=:``` `````:.zvueQdQ:``
J`JOZQQ6v:``..`` ``JdXXSn..
`.,?4QXn=,,`....` ..zv4Zk``
..:cZ#Oxz:,..`````` .Jv``vx`
.?wd#X=cc;,```` `z:`.c:
``3Qmvz=c...;..... ..... `,`` :``
.s:4X=?z:aaaaaeQQx...` ..uggaJ....:. ```
4#wv::?4dMKWB!?99O:` `7V3MZV#T%``` `
?Sc,````790=;``.``` ```=^` `
7|``..`` `.``
.:,...` ..... .
`Jz:...` .J:`` .`
`zoz,.....Jsau..... ` ..
`zz4xc....`3@WWP"' ....`` `
.:zZZxzx.,`.```` ..````
upz4ZQ,?3MMMMMM#T"0: `..`
.MMMQQQZoc:3H#ggay=: .`
.JMMMMMMmQnz=::::``` .r
.`JMMMMMMMMMmQy:.. ..gMp
..JMMMMMMMMMMMMMMMmQaaaagMMMMBBma..
.JgMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMBBmQ...
..gMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmmgJ...
.JMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMBQ
..gMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
..gMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM

Result: _...._..______
_./..zzz=_3v0czxx\._
_./`Jzxx==:/.|?=....`::\._
../....cv0Or`|./JnZ|i|.._=::.\
./:=,?v4Gsz:i`aJxav.._/```\._vz\.
/.,..,:zvv=/`|?#XQAx|` `i|`:=\.
/`,usaJv0=,|./v0v4QQ+|__..../..czxx\`
../..a=vOUXna.`...v`4SSxuwZc:..`==vvv==\_
``/a:aowwxOxsxvv0__:i___________:`:vO00On:\.
||:v4X###UU0=:/`` `````\._vueQdQ|``
|iJOZQQ6v:``|.`` `\JdXXS|..
\.|?4QXn=,,`.\..` .|zv4Zk\`
./:cZ#Oxz:,..|````` .|v``v|`
|?wd#X=cc;,`|ii `|:i.c|
|`3Qmvz=c...;..\.._ ___..... `|`` |/`
\s:4X=?z:aaaaaeQQx.\.` /.uggaJ..\.\. \``
\#wv::?4dMKWB!?__O|` \___MZV#_/``` `
\Sc,```i_____/`.||` `\i_/` `
\|``.|`` `||`
|:,.\.` ./.|. .
\Jz:.\.` /J:|` .`
|zoz,\....|sau\../. ` /\
\zz4xc....`3@__8i/ ...//` `
.|zZZxzx.,`.|iii___ /.ii/`
/pz4ZQ,?3MMMMMM#T"0\ `..`
/MMMQQQZoc:3H#gg___/ .`
./MMMMMMmQnz=::::/`` _/\
./JMMMMMMMMMmQy:|._____./gM|____
_./JMMMMMMMMMMMMMMMmQaaaagMMMMBBma.\_____
__/JgMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMBBmQ..\______
__/.gMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmmgJ.\._
__/JMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMB\
_./gMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM|
_./gMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM|

Looks strange, doesn't it? :-)
Ideas, comments, diddles?

Markus

PS: The edge tracing algorithm will be part of the next release of JavE.
--
\-/ http://www.jave.de O_< Get JavE now! \-/
J|a|v|E /| J|a|v|E
/-\ Ascii-Art for eyeryone / \ - for free! /-\

Andreas Freise

unread,
Jan 27, 2002, 4:54:17 PM1/27/02
to

On Sat, 26 Jan 2002, Markus Gebhard wrote:
[...]

> The results are somewhat funny:
> _________
> _________ _/ \_
> _/ \_/__/ __\
> /________ / \
> / | |
> __/ _ \
> / / \ _ \
> _/ _ / | | \_ |
> / __/ | | \ | \_/
> |__/ / / \__ |
> \ | | \_/
> / |
> | /
> / |
> / /
> | |
> | |
> | |
> | |
> | |
> | |
> / |
> | |_
> /______\
[...]

>
> But this is no good point for starting a _real_ edge detection
> algorithm. Anyway, may investigations on that topic show that chances
> are very low for edge detection being the key to better image2ascii
> algorithms.

Mh - but but but - I feel that the edge detect with a proper line algorithm
would be quite nice for someone working in the `watermark' mode. I only tried
once to use a greyscale-converted picture as a basis for a line picture and the
work as well as the result were not promising (to say the least). A nice
edge detect would make the copying from a bitmap image somewhat easier.

And, apart from that, I don't think the examples you posted are `bad'
images. They are good starting points I think.

[...]


> PS: The edge tracing algorithm will be part of the next release of JavE.

Surprise! ;)
No, really, I like that!

:)
Andreas

--
________________________________________________ http://www.ascii-art.de

Markus Gebhard

unread,
Jan 28, 2002, 4:00:41 PM1/28/02
to
Andreas Freise wrote:
>
> On Sat, 26 Jan 2002, Markus Gebhard wrote:
> [...]
> > The results are somewhat funny:
> > _________
> > _________ _/ \_
> > _/ \_/__/ __\
> > /________ / \
> > / | |
> > __/ _ \
> > / / \ _ \
> > _/ _ / | | \_ |
> > / __/ | | \ | \_/
> > |__/ / / \__ |
> > \ | | \_/
> > / |
> > | /
> > / |
> > / /
> > | |
> > | |
> > | |
> > | |
> > | |
> > | |
> > / |
> > | |_
> > /______\
[...]
> Mh - but but but - I feel that the edge detect with a proper line algorithm
> would be quite nice for someone working in the `watermark' mode. I only tried
> once to use a greyscale-converted picture as a basis for a line picture and the
> work as well as the result were not promising (to say the least). A nice
> edge detect would make the copying from a bitmap image somewhat easier.
>
> And, apart from that, I don't think the examples you posted are `bad'
> images. They are good starting points I think.

Ok, you are right about the watermark thing.

Initially I meant that the algorithm itself is no good point to start
from for writing a better algorithm. However, I have tried to optimize
the output from the algorithm:
_________
,--'______ ,-' `.
,' `-. / \
/___ \_| ___\
/' `-.__ |
__| \
/ _ |
,' | \ _ \
/ _ / | | `. |
/ ,-' | / \_ | `-./
\ ,-' / | `. |
\ | / `-./


/ |
/ /
| |
/ |
| /
| |
| |
/ |
| |
| |
| |
| |

/ |_ ______________
/_______\ ,'::::::_:::::::`-.
,--'::::::,' |:::__::::`-.
,':::::::::|___|::|_ `-._:::`.
/::::::::::_:::::::::\ `.:::\
/:::::::::,' |:::::::/ |:::`.
/:::::::::|__/:::::::|__,,--''::::::\
/::::::::::::::::::::::::::::::::::::|_
/::::::::::::::________________:::::::::\
|::::::::::::,' `-.::::::|
|:::::::::::| \::::::\
\:::::::::::| |:::::|
|:::::::::::\ |::_::|
/::::::::::::| |_| |:|
|::::::::::::`-._ ____ | \ \:/
|::::::::::::::::`. /::::`._ \\ \
\::::::::::::::_:::\ /__:::::_\ \
\:::::::,,--'' `-.| `-._/
`.::::| |
\:::| /|
|:::\ /:|
\::::`. /::|___
|:::::`-._|:::::_\ /\
|::::::::::::::|___ O
|::::::::::::::::::\ O
/::::::::::::::::::/
/:::::::::::::,,--'' /
,':::::::::::::| ,-'|_
,'::::::::::::::::`-.,--':::::`-.__
,-':::::::::::::::::::::::::::::::::::`-.___
,-'::::::::::::::::::::::::::::::::::::::::::::`-._____
,--':::::::::::::::::::::::::::::::::::::::::::::::::::::::\
,-'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\
,-':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::|
,'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::|
/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::|
/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::|
|:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::|
``--..___________________________________________________________,,--''

___________________________________________________________________
/_::_::_________________________:______:__:__::___________________:_\
|_|/ |/ ____ | \ | |/ \ |
|,' | /::_:\ /\ /\ / |\ /\ / | | /|
| \\ \_/ \/ \/ \/ // /_/ \/ \\ \ \\ _/__ |
| ___________ /____\ |
| /:::::::::::\ ___ /\_/`-./\ |
| ``--.:::,--'' /_::\__ /___::::_:`. |
| _ |:| \___:`--. |::/ \::\ |
| /_\ |:| `.:::`-. |:/ \::\ /\ |
| |:| ________|:::::`. || || |
| |:| /::::::::::::::::\ ,'::\ |:`. _ |
| |:| ``--.._:::::::,--' /:::|__/\_|:::\ /_\ |
| /\ |:| __|::,--' |::_________:::\ |
| |:| __/::__/ |:| \:| |
| ____|:|____ /:___/ /,'::/ |:\_/ |
| /:::::::::::\ \/ |:::|_/\ /\_|::::\ |
| _/__|______,,--'' /______/ O \__,,--'' |
| /_::,' _ |
| \/ /_\ __ __ / / / __ /\ /\ /\ / |
|\ \ O O /::\ /__\ \ | \ / O /__\ | O \ \ O | /|
|_/__________/_____|:::`.__|__/__|___/,'|_,'___|_____|_____,'__|_,'_|
\___________________________________________________________________/

But that is already the limit of what you can do with it. For a _real_
edge detection algorithm it takes a lot more... Well maybe... - we will
see :-)

> [...]
> > PS: The edge tracing algorithm will be part of the next release of JavE.
>
> Surprise! ;)
> No, really, I like that!

I am beginning to like it too :-)

Markus

Bateau

unread,
Jan 29, 2002, 12:42:53 AM1/29/02
to
____ On Fri, 25 Jan 2002 18:32:19 -0600
\__/___ Eric Harshbarger ran through the
LI-\o-' streets of alt.ascii-art
| waving an axe and screaming:
/ \

>Hi all, thought some of you might get a kick out of this project I just
>finished. A large ASCII mosaic constructed of tiny plastic letter
>bricks:
>
>http://www.ericharshbarger.org/lego/calista.html

That's even cooler than those lego pornos people do! Have you shown
any Calista Flockhart fan clubs yet?
--
| _ .\ ~~ _ ^~
| <')_,/ , ; .\ >(')__, . ` ' ,
| (_~=/ \._`.'. .\ (_~_/ _, _..-''-._,____,----,____
| ='- \=~_) ; .\ ~^~~^~ ` (_~_/ `'--'` `~~~~)_)=\_\-.(
| -'= .\ ~^~ ~^~~^~
ICQ:11367619 EMAIL:bateau:-)jupiter-io.net WEB:http://tyrian2000.cjb.net

0 new messages