This undefined 'U' states occur when signals do not have a defined state right from the beginning of the simulation.
We can get rid of this by changing the process to this code:
read_file : PROCESS IS
FILE file_in : text; -- file ID
VARIABLE line_rd : line; -- text line
VARIABLE data_in : integer; -- integer data input
VARIABLE i : integer := 0; -- line counter
BEGIN
file_open(file_in, filename, read_mode);
pixel_value <= (OTHERS => '0');
WAIT UNTIL rising_edge(start);
WHILE (NOT endfile(file_in)) LOOP
readline(file_in, line_rd);
read(line_rd, data_in);
read_frame_array(i) <= std_logic_vector(to_unsigned(data_in, 8));
pixel_value <= std_logic_vector(to_unsigned(data_in, 8));
i := i + 1;
WAIT UNTIL rising_edge(start);
END LOOP;
file_close(file_in);
WAIT;
END PROCESS read_file;