If your visible units are real-valued then your conditionals change a bit.
Like shown in (Lee, Honglak and Ekanadham, Chaitanya and Ng, Andrew, 2007):
P(vi}=1 | h) = Ν(ci + Σj Wi,j . hj , σ2) --> Where N(mean, sttdev) is a Gaussian distribution.
P(hj}=1 | v) = σ( (bj + Σi Wi,j . vi) / σ2 ) --> Where σ is sigmoid function
σ2 is a hyperparameter (working as standard deviation here)
PS: Is not here, but your h should sample from a Bernoulli distribution (since it is a binary layer) during Gibbs Sampling.
With this you keep your visible unit real-valued, but be careful sampling from a Gaussian dist. after a reconstruction will get you values < 0 and > 1.
So a normalization of visible units is needed to get reasonable results.
I didn't tested much with RBMs because they don't work with filters and don't preserve spatial features since they hidden layers are, basically, a Dense layer.
Probably will be better to work on Convolutional RBMs where you can transform a RGB image (3 channels) into a binary hidden layer with more than 3 channels/filters trying to represent your "colors".
PS: In these type of RBMs your conditionals will not change much, just replace matrix multiplication for a convolution (in the second will be a transposed convolution)
I'm writing some code here to work with RBMs, CRBMs, Deep Belief Networks using Tensorflow 2 so if you or someone else needs help with code and/or theory
you can check the repository and ask me below on comments.