
We see with the eyes . But we see with the brain as well . And seeing with the brain is often called imagination . And we are familiar with the landscapes of our own imagination , our inscapes . We 've lived with them all our lives . But there are also hallucinations as well . And hallucinations are completely different . They do n't seem to be of our creation . They do n't seem to be under our control . They seem to come from the outside , and [ seem ] to mimic perception . So I am going to be talking about hallucinations . And a particular sort of visual hallucination which I see among my patients . A few months ago I got a phone call from a nursing home where I work . They told me that one of the residents , an old lady in her 90s , was seeing things . And they wondered if she 'd gone bonkers . Or , because she was an old lady , whether she 'd had a stroke , or whether she had Alzheimer 's . And so they asked me if I would come and see Rosalie , the old lady . I went in to see her . It was evident straight away that she was perfectly sane and lucid and of good intelligence . But she 'd been very startled , and very bewildered because she 'd been seeing things . And she told me -- the nurses had n't mentioned this -- that she was blind , that she had been completely blind , from macular degeneration , for five years . But now , for the last few days , she 'd been seeing things . So I said , " What sort of things ? " And she said , " People in Eastern dress , in drapes , walking up and down stairs . A man who turns towards me and smiles . But he has huge teeth on one side of his mouth . Animals too . I see a white building . It 's snowing , a soft snow . I see this horse , with a harness , dragging the snow away . Then , one night , the scene changes . I see cats and dogs walking towards me . They come to a certain point and then stop . Then it changes again . I see a lot of children . They are walking up and down stairs . They wear bright colors , rose and blue , like Eastern dress . " Sometimes , she said , before the people come on she may hallucinate pink and blue squares on the floor , which seem to go up to the ceiling . I said , " Is this like a dream ? " And she said , " No , it 's not like a dream . It 's like a movie . " She said , " It 's got color . It 's got motion . But it 's completely silent , like a silent movie . " And she said that it 's a rather boring movie . She said , " All these people with Eastern dress , walking up and down , very repetitive , very limited . " ( Laughter ) And she has a sense of humor . She knew it was a hallucination . But she was frightened . She 'd lived 95 years and she 'd never had a hallucination before . She said that the hallucinations were unrelated to anything she was thinking or feeling or doing . That they seemed to come on by themselves , or disappear [ by themselves ] . She had no control over them . She said she did n't recognize any of the people or places in the hallucinations . And none of the people or the animals , well , they all seemed oblivious of her . And she did n't know what was going on . She wondered if she was going mad , or losing her mind . Well , I examined her carefully . She was a bright old lady . Perfectly sane . She had no medical problems . She was n't on any medications which could produce hallucinations . But she was blind . And I then said to her , " I think I know what you have . " I said , " There is a special form of visual hallucination which may go with deteriorating vision , or blindness . " " This was originally described , " I said , " back in the 18th century , by a man called Charles Bonnet . And you have Charles Bonnet syndrome . There is nothing wrong with your brain . There is nothing wrong with your mind . You have Charles Bonnet syndrome . " And she was very relieved at this , that there was nothing seriously the matter , and also rather curious . She said , " Who is this Charles Bonnet ? " She said , " Did he have them himself ? " And she said , " Tell all the nurses that I have Charles Bonnet syndrome . " ( Laughter ) " I 'm not crazy . I 'm not demented . I have Charles Bonnet syndrome . " Well , so I did tell the nurses . Now this , for me , is a common situation . I work in old-age homes , largely . I see a lot of elderly people who are hearing impaired or visually impaired . About 10 percent of the hearing impaired people get musical hallucinations . And about 10 percent of the visually impaired people get visual hallucinations . You do n't have to be completely blind , only sufficiently impaired . Now with the original description in the 18th century , Charles Bonnet did not have them . His grandfather had these hallucinations . His grandfather was a magistrate , an elderly man . He 'd had cataract surgery . His vision was pretty poor . And in 1759 he described to his grandson various things he was seeing . The first thing he said was he saw a handkerchief in midair . It was large blue handkerchief with four orange circles . And he knew it was a hallucination . You do n't have handkerchiefs in midair . And then he saw a big wheel in midair . But sometimes he was n't sure whether he was hallucinating or not . Because the hallucinations would fit in the context of the visions . So on one occasion , when his granddaughters were visiting them , he said , " And who are these handsome young men with you ? " And they said , " Alas , Grandpapa , there are no handsome young men . " And then the handsome young men disappeared . It 's typical of these hallucinations that they may come in a flash and disappear in a flash . They do n't usually fade in and out . They are rather sudden . And they change suddenly . Charles Lullin , the grandfather , saw hundreds of different figures , different landscapes of all sorts . On one occasion he saw a man in a bathrobe smoking a pipe , and realized it was himself . That was the only figure he recognized . On one occasion when he was walking in the streets of Paris , he saw -- this was real -- a scaffolding . But when he got back home he saw a miniature of the scaffolding six inches high , on his study table . This repetition of perception is sometimes called palinopsia . With him , and with Rosalie , what seems to be going on -- and Rosalie said , " What 's going on ? " -- and I said that as you lose vision , as the visual parts of the brain are no longer getting any input , they become hyperactive and excitable . And they start to fire spontaneously . And you start to see things . The things you see can be very complicated indeed . With another patient of mine , who , [ like Charles Lullin , still ] had some vision , the vision she had could be disturbing . On one occasion she said she saw a man in a striped shirt in a restaurant . And he turned around . And then he divided into six identical figures in striped shirts , who started walking towards her . And then the six figures came together again , like a concertina . Once , when she was driving , or rather , her husband was driving , the road divided into four . And she felt herself going simultaneously up four roads . She had very mobile hallucinations as well . A lot of them had to do with a car . Sometimes she would see a teenage boy sitting on the hood of the car . He was very tenacious and he moved rather gracefully when the car turned . And then when they came to a stop , the boy would do a sudden vertical take off , 100 foot in the air , and then disappear . Another patient of mine had a different sort of hallucination . This was a woman who did n't have trouble with her eyes , but the visual parts of her brain . A little tumor in the occipital cortex . And , above all , she would see cartoons . These cartoons would be transparent and would cover half the visual field , like a screen . And especially she saw cartoons of Kermit the Frog . ( Laughter ) Now , I do n't watch Sesame Street . But she made a point of saying , " Why Kermit ? " She said , " Kermit the Frog means nothing to me . You know , I was wondering about Freudian determinants . Why Kermit ? Kermit the Frog means nothing to me . " She did n't mind the cartoons too much . But what did disturb her was she got very persistent images or hallucinations of faces and as with Rosalie , the faces were often deformed , with very large teeth , or very large eyes . And these frightened her . Well , what is going on with these people ? As a physician , I have to try and define what 's going on , and to reassure people . Especially to reassure them that they 're not going insane . Something like 10 percent , as I said , of visually impaired people get these . But no more than one percent of the people acknowledge them . Because they are afraid they will be seen as insane , or something . And if they do mention them to their own doctors they may be misdiagnosed . In particular , the notion is that if you see things or hear things , you 're going mad . But the psychotic hallucinations are quite different . Psychotic hallucinations , whether they are visual or vocal , they address you . They accuse you . They seduce you . They humiliate you . They jeer at you . You interact with them . There is none of this quality of being addressed with these Charles Bonnet hallucinations . There is a film . You 're seeing a film which has nothing to do with you . Or that 's how people think about it . There is also a rare thing called temporal lobe epilepsy . And sometimes , if one has this , one may feel oneself transported back to a time and place in the past . You 're at a particular road junction . You smell chestnuts roasting . You hear the traffic . All the senses are involved . And you 're waiting for your girl . And it 's that Tuesday evening back in 1982. And the temporal lobe hallucinations are all multisensory hallucinations , full of feeling , full of familiarity , located in space and time , coherent , dramatic . The Charles Bonnet ones are quite different . So in the Charles Bonnet hallucinations , you have all sorts of levels , from the geometrical hallucinations , the pink and blue squares the woman had , up to quite elaborate hallucinations with figures and especially faces . Faces , and sometimes deformed faces , are the single commonest thing in these hallucinations . And one of the second commonest is cartoons . So , what is going on ? Fascinatingly , in the last few years , it 's been possible to do functional brain imagery , to do fMRI on people as they are hallucinating . And in fact , to find that different parts of the visual brain are activated as they are hallucinating . When people have these simple geometrical hallucinations , the primary visual cortex is activated . This is the part of the brain which perceives edges and patterns . You do n't form images with your primary visual cortex . When images are formed , a higher part of the visual cortex is involved in the temporal lobe . And in particular , one area of the temporal lobe is called the fusiform gyrus . And it 's known that if people have damage in the fusiform gyrus , they maybe lose the ability to recognize faces . But if there is an abnormal activity in the fusiform gyrus , they may hallucinate faces . And this is exactly what you find in some of these people . There is an area in the anterior part of this gyrus where teeth and eyes are represented . And that part of the gyrus is activated when people get the deformed hallucinations . There is another part of the brain which is especially activated when one sees cartoons . It 's activated when one recognizes cartoons , when one draws cartoons , and when one hallucinates them . It 's very interesting that that should be specific . There are other parts of the brain which are specifically involved with the recognition and hallucination of buildings and landscapes . Around 1970 it was found that there were not only particular parts of the brain [ involved ] , but particular cells . " Face cells " were discovered around 1970. And now we know that there are hundreds of other sorts of cells , which can be very very specific . So you may not only have " car " cells , you may have " Aston Martin " cells . ( Laughter ) I saw an Aston Martin this morning . I had to bring it in . And now it 's in there somewhere . ( Laughter ) Now , at this level , in what 's called the inferotemporal cortex , there are only visual images , or figments or fragments . It 's only at higher levels that the other senses join in and there are connections with memory and emotion . And in the Charles Bonnet syndrome you do n't go to those higher levels . You 're in these levels of inferior visual cortex where you have thousands and tens of thousands and millions of images , or figments , or fragmentary figments , all neurally encoded , in particular cells or small clusters of cells . Normally these are all part of the integrated stream of perception , or imagination . And one is not conscious of them . It is only if one is visually impaired , or blind , that the process is interrupted . And instead of getting normal perception , you 're getting an anarchic , convulsive stimulation , or release , of all of these visual cells , in the inferotemporal cortex . So , suddenly you see a face . Suddenly you see a car . Suddenly this , and suddenly that . The mind does its best to organize , and to give some sort of coherence to this . But not terribly successfully . When these were first described it was thought that they could be interpreted like dreams . But in fact people say , " I do n't recognize the people . I ca n't form any associations . " " Kermit means nothing to me . " You do n't get anywhere thinking of them as dreams . Well , I 've more or less said what I wanted . I think I just want to recapitulate and say this is common . Think of the number of blind people . There must be hundreds of thousands of blind people who have these hallucinations , but are too scared to mention them . So this sort of thing needs to be brought into notice , for patients , for doctors , for the public . Finally , I think they are infinitely interesting , and valuable , for giving one some insight as to how the brain works . Charles Bonnet said , 250 years ago -- he wondered how , thinking these hallucinations , how , as he put it , the theater of the mind could be generated by the machinery of the brain . Now , 250 years later , I think we 're beginning to glimpse how this is done . Thanks very much . ( Applause ) Chris Anderson : That was superb . Thank you so much . You speak about these things with so much insight and empathy for your patients . Have you yourself experienced any of the syndromes you write about ? Oliver Sacks : I was afraid you 'd ask that . ( Laughter ) Well , yeah , a lot of them . And actually I 'm a little visually impaired myself . I 'm blind in one eye , and not terribly good in the other . And I see the geometrical hallucinations . But they stop there . C. A. : And they do n't disturb you ? Because you understand what 's doing it . It does n't make you worried ? O. S. : Well they do n't disturb me any more than my tinnitus . Which I ignore . They occasionally interest me . And I have many pictures of them in my notebooks . I 've gone and had an FMRI myself to see how my visual cortex is taking over . And when I see all these hexagons and complex things , which I also have , in visual migraine , I wonder whether everyone sees things like this , and whether things like cave art , or ornamental art may have been derived from them a bit . C. A. : That was an utterly utterly fascinating talk . Thank you so much for sharing . O. S. : Thank you . Thank you . ( Applause ) 