Yeah, like Bastien sez, use a db for user registration, and storing links to the images.
If the image files aren't stored in the site directory tree but somewhere "off-site", then they'll be unavailable to anyone just trying to get site directory listings but will still be visible to PHP.
So the question is how you serve them up. You can have the script do that, too. the <img> src= attribute would refer to a PHP script, and that script will (a) check appropriate registration, (b) get the filename from the database, (c) fetch the image file itself from wherever it's hiding on the server, (d) echo it out in response to the original request.
<?php
...steps a,b...
$file=fopen("/path/to/images/".$filename, "rb"); // 'b' unnecessary except on Windows
$image=fread($file,filesize($file));
fclose($file);
header('Content-type: image/jpeg'); //Or GIF, or PNG, or whatever - figure this out from the filename extension
echo $image;
?>
Because the images aren't stored in your site directory structure, the only way that they can be seen by someone unauthorised is if they break into your filesystem. Chances are that then looking at unauthorised pics is the least of your problems.