Mathematica, 180 bytes
(f=Flatten@#;p=Partition)[If[Tr[1^VertexComponent[r~Graph~Cases[##&@@p[#,2,1]&/@Join[g=p[r,5],g],{a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" ":>a<->b],#]]<3,f[[#]],"x"]&/@(r=Range@25),5]&
Explicação:
(f=Flatten@#;p=Partition)[
If[
Tr[1^VertexComponent[
r~Graph~Cases[
##&@@p[#,2,1]&/@Join[g=p[r,5],g],
{a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" ":>a<->b
],
#
]]<3,
f[[#]],
"x"
]&/@(r=Range@25),
5
]&
Função pura que aceita uma 5x5matriz. é o caractere de uso privado de 3 bytes que U+F3C7representa o operador de transposição do postfix \[Transpose].
(f=Flatten@#;p=Partition): Nivela a lista de entrada e a armazena f. Define p = Partitione retorna.
g=p[r,5]: A matriz {{1,2,3,4,5}, ..., {21,22,23,24,25}}(isso ocorre porque ré definido como Range@25).
Join[g=p[r,5],g]: a lista de linhas e colunas de g.
p[#,2,1]&: Função pura que divide a lista #em sublistas de comprimento 2com sobreposição 1; ou seja, a lista de pares adjacentes em #.
##&@@p[#,2,1]&: O mesmo que acima, exceto que retorna a Sequence.
##&@@p[#,2,1]&/@Join[g=p[r,5],g]: Mapeia a função anterior das linhas e colunas de gpara obter uma lista de todas as entradas adjacentes em g. Meu intestino diz que há uma maneira mais curta de fazer isso.
r~Graph~Cases[...]: Gráfico cujos vértices são os números inteiros 1, ..., 25e cujas arestas são as arestas entre entradas adjacentes nas gquais têm as mesmas entradas correspondentes na matriz de entrada (diferente de " ")
{a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" ": Padrão que corresponde a {a,b}tal que f[[a]] == f[[b]](mesmo valor na matriz de entrada) e que não é igual a " ". Defina A = f[[a]]para salvar o 1byte.
...:>a<->b: Substitua todas as correspondências por uma borda não direcionada de a a b.
VertexComponent: Retorna o componente conectado do segundo argumento (um vértice) no primeiro argumento (um gráfico).
Tr[1^VertexComponent[...]]: O tamanho do componente conectado. Salva 1byte de Length@VertexComponent[...].
If[Tr[...]<3,f[[#]],"x"]&: Função pura que leva uma entrada #no g. Se o tamanho do componente conectado for menor que 3, substitua-o pela entrada correspondente na entrada. Caso contrário, substitua-o por "x".
(f=Flatten@#;p=Partition)[...,5]: E, finalmente, remodelar o resultado para ser uma 5x5matriz.