Предполагая, что фон является постоянным значением, и что изображение не имеет постоянных строк, столбцов и что полезное изображение представляет собой прямоугольник в середине большего изображения с фоном:
colsWithImg = find(any(abs(diff(img)))); % idxs of cols with any img in it.
rowsWithImg = find(any(abs(diff(img'))));
imgWithNoBG = img(min(rowsWithImg):max(rowsWithImg),min(colsWithImg):max(colsWithImg));
% this will also work: but you will lose any constant rows / cols
% imgWithNoBG = img(rowsWithImg,colsWithImg);
Теперь, когда у вас есть изображение без фона, его легко растянуть, используя imresize, при условии, что у вас есть набор инструментов для обработки изображений.
resizedImg = imrezize(imgWithNoBG,newSize);
Чтобы удалить артефакт, сначала опишите расколотый выделенный символ:
descImg = floor((nDescLevels*imgWithNoBg)/max(max(imgWithNoBg)))
colsNoArtifact = find(any(abs(diff(descImg))));
rowsNoArtifact = find(any(abs(diff(descImg'))));
И затем извлечь правильные строки из некритичного изображения
img3 = imgWithNoBG(min(rowsNoArtifact):max(rowsNoArtifact),min(colsNoArtifact):max(colsNoArtifact));
Уменьшение количества уровней дескритизации поможет удалить больше артефакта, но с большей вероятностью ошибочноудалить часть персонажа.Я также предвижу некоторые проблемы с числами, такими как 1 или 7, где часть персонажа может быть принята за артефакт.