У меня есть проблема программирования вне досягаемости моего самого заикающегося опыта Matlab. У меня есть список изображений и список ROI маски в массиве ячеек, и я хочу, чтобы извлечь среднее значение пикселя каждого ROI в отдельности, Мой код выглядит следующим образом:Извлечь многократное значение пикселя ROI из нескольких изображений
files=dir('*.tif');
for f=1:length(files)
image=im2double(imread(files(f).name));
pixel_value(:,f)=cellfun(@(x) extractROIpixel(x,image), mask);
% apply extractROIpixel on each cell of the mask array
end
function [ mean_pixel_value ] = extractROIpixel(mask, img)
mask=im2double(mask);
mask(mask == 0) = NaN;
mask_area=mask.*img;
mean_pixel_value=mean(mask_area(~isnan(mask_area)));
end
Это работает, но очень медленно (< 5min), у меня есть 400 изображений для обработки с 200 длинными ячейками массивов масок (200 ROI). Я уверен, что это связано с плохим дизайном, поскольку Matlab широко используется для таких задач обработки изображений, но я не могу понять, какой еще доступный способ сделать это, спасибо заранее.
Спасибо за ваш быстрый ответ, но он не может работать, поскольку я хочу применить функцию «masked» к каждой ячейке моего массива масок в одном и том же изображении: другими словами, мне нужно применить функцию по всей маске сохраняя изображение неизменным и повторяя все мои изображения. Следовательно, мой цикл «for» в списке изображений. – user2319639
Я вижу. Я отредактировал его соответствующим образом. Опять же, я не знаю, эффективна ли «regionprops». –
Спасибо, что обратил мое внимание на метод regionprops, о котором я не знал ... Но на самом деле это занимает в два раза больше времени, чем моя функция extractROIpixel. – user2319639