As most apache setups already redirect requests like example.com to example.com/, there is no need for the third condition in your edit. So the code would become
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain\.com/.*$ [NC]
RewriteRule .*\.(jpg|jpeg|png|gif)$ - [F,NC,L]
Scrapers don't even need to use subdomains, as they can just fake the http headers being sent. No way to prevent this.
The rest of the code is okay. I would use this if I needed it.