Here is a simple R solution.require(raster)
require(sp)
require(rgdal)
n=30 # NUMBER OF RANDOM SAMPLES PER CLASS
# READ RASTER (NOT RUN)
#r <- raster("C:/mydata/myraster.img")
# CREATE EXAMPLE DATA WITH 5 CLASSES
r <- raster(ncol=100,nrow=100)
r[] <- round(runif(100*100, 1,5),digits=0)
# CREATE STRATIFIED RANDOM SAMPLE WITH n SAMPLES PER STRATA (CLASS)
rs <- sampleStratified(r, size=n, na.rm=TRUE, sp=TRUE)
# PLOT AND COLOR POINTS BASED ON CLASS
plot(r)
points(rs, col=rs$layer, pch=19)
# WRITE SHAPEFILE WITH RANDOM POINTS
writeOGR(rs, "C:/mydata", "RandSamp", driver="ESRI Shapefile")