Я новичок в MATLAB и обработке изображений.
Я столкнулся с проблемой при попытке использовать пакетную обработку и надеюсь, что кто-нибудь сможет меня просветить. Спасибо.
Следуя примеру MATLAB, я сделал это:
p = which('Picture1.tif');
filelist = dir([fileparts(p) filesep 'Picture*.tif']);
fileNames = {filelist.name}'
I = imread(fileNames{1});
imshow(I)
Поскольку я хотел выбрать интересующую область,
BW = roipoly(I);
BW1 = not(BW);
N = roifill(I,BW1);
После выбора области интереса я создал функцию в редакторе:
function Segout = DetectLines(N)
[junk threshold] = edge(N, 'sobel');
fudgeFactor = .5;
BWs = edge(N, 'sobel', threshold*fudgeFactor);
se90 = strel('line', 3, 90);
se0 = strel('line', 3, 0);
BWsdil = imdilate(BWs, [se90 se0]);
BWdfill = imfill(BWsdil, 'holes');
BWnobord = imclearborder(BWdfill, 4);
seD = strel('diamond', 1);
BWfinal = imerode(BWnobord, seD);
BWfinal = imerode(BWfinal, seD);
BWoutline = bwperim(BWfinal);
Segout = N;
Segout(BWoutline) = 255;
end
Вернувшись в командное окно, я набрал;
Segout = DetectLines(N);
figure, imshow(Segout)
Получившаяся фигура была именно тем, чего я ожидал.
Проблема возникает сейчас, когда я пытаюсь перебрать изображения. Я не уверен, что сделал это
правильно.
Следуя примеру, я создал другую функцию в редакторе;
function SegoutSequence = BatchProcessFiles(fileNames, fcn)
N = imread(fileNames{1});
[mrows, ncols] = size(N);
nImages = length(fileNames);
SegoutSequence = zeros(mrows, ncols, nImages, class(N));
parfor (k = 1:nImages)
N = imread(fileNames{k});
SegoutSequence(:,:,k) = fcn(N);
end
end
В командном окне я набрал:
SegoutSequence = BatchProcessFiles(fileNames, @DetectLines);
implay(SegoutSequence)
Однако результат оказался не таким, как я хотел. Я хотел не окупаемость инвестиций. Кто-нибудь может мне с этим помочь? Большое спасибо.
Picture1:
Picture1 после выбора ROI: