testImageIdx = randi([1,3])
testCoinImage = imread("testCoinImage"+testImageIdx+".png");
[testcoinMask, MaskedtestCoin] = segmentCoin(testCoinImage);
se = strel('disk', 20, 0);
testcoinMask = imfill(testcoinMask, 'holes');
testcoinMask = imerode(testcoinMask, se);
imgFilt = imgaussfilt(MaskedtestCoin, 0.5, 'Padding', 'circular', 'FilterDomain', 'frequency', 'FilterSize', 3);
faceEdgeMask = edge(imgFilt, 'sobel', 0.05, 'both');
faceEdgeMask(~testcoinMask) = false;
se = strel('disk', 60, 0);
faceEdgeMask = imdilate(faceEdgeMask, se);
validCoinMask = faceEdgeMask & testcoinMask;
figure, imshow(validCoinMask), title('Valid Coin Mask');
function [BW, maskedImage] = segmentCoin(inputImage)
BW = imbinarize(im2gray(inputImage));
BW = imfill(BW, 'holes');
BW = bwareaopen(BW, 2000);
labeledImage = bwlabel(BW);
coinProps = regionprops(BW, inputImage, 'PixelValues');
for k = 1 : numel(coinProps)
allSDs(k) = std(double(coinProps(k).PixelValues));
BW = ismember(labeledImage, find(allSDs >= 15));
maskedImage = inputImage;