ClearAll[layerF, layerindicesF]
layerF[dims : {_, _}, {r_, c_}] := Module[{m = Array[1 &, dims]},
ArrayPad[ArrayPad[m, {{-r + 1}, {-c + 1}}], {{r - 1}, {c - 1}}] -
If[ArrayPad[m, {{-r}, {-c}}]==={}, 0, ArrayPad[ArrayPad[m, {{-r}, {-c}}], {{r}, {c}}]]]
layerF[dims : {_, _}, r_Integer] := layerF[dims, {r, r}]
layerindicesF[dims : {_, _}, rc_] := Position[layerF[dims, rc], 1]
Examples:
layerF[{10, 10}, {2, 3}] /. 1 -> Style[1, 20, Red] // MatrixForm

layerindicesF[{10, 10}, 3]
{{3, 3}, {3, 4}, {3, 5}, {3, 6}, {3, 7}, {3, 8}, {4, 3}, {4, 8}, {5, 3}, {5, 8}, {6, 3}, {6, 8}, {7, 3}, {7, 8}, {8, 3}, {8, 4}, {8, 5}, {8, 6}, {8, 7}, {8, 8}}
SeedRandom[1]
m = RandomInteger[10, {10, 10}];
Extract[m, layerindicesF[{10, 10}, 3]]
{2, 6, 4, 5, 4, 3, 3, 9, 3, 4, 9, 10, 2, 1, 8, 6, 5, 6, 0, 10}
Grid[m, Background -> {None, None,
Join @@ (Thread[layerindicesF[{10, 10}, #] -> {Red, Orange, Yellow, Pink,
LightRed}[[#]]] & /@ Range[5])}, ItemSize -> {2, 2},
Dividers -> All, ItemStyle -> Directive[20, Bold]]

Row[{MatrixForm[m], MatrixForm @ MapAt[Style[#, Red, Bold, 20] &,
m layerF[Dimensions[m], 3], layerindicesF[Dimensions[m], 3]],
MatrixForm @ MapAt[Style[#, Red, Bold, 20] &, m, layerindicesF[Dimensions[m], 3]]},
Spacer[5]]

Row[MatrixForm @ MapAt[Style[#, Red, Bold, 20] &, m layerF[Dimensions[m], #],
layerindicesF[Dimensions[m], #]] & /@ {{2, 4}, {1, 3}, {3, 2}}, Spacer[5]]

Note: C.E.'s method using CenterArray
is much more elegant. However, it is available only in versions v11+. The method above works in version 9.