Сглаживание / интерполяция трехмерной карты цветов поверхности - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь сгладить или интерполировать «ступеньки» до максимума интенсивности и в то же время сохранить форму поверхности, чтобы предполагаемая ширина не сместилась или не изменилась.Я попытался выполнить интерполяцию до более высокого разрешения с использованием 2D-сплайна, но «шаги» все еще присутствуют, и предполагаемая область максимумов изменяется.Может ли кто-нибудь помочь мне сгладить / интерполировать эти шаги, чтобы поверхность выглядела более непрерывной при сохранении формы поверхности?

Как всегда, большое спасибо заранее за любой совет или помощь !!

Неинтерполированный enter image description here Интерполированный enter image description here

Попытка

conversion = 1/49.0196; % in mm/pixel

new_xData = linspace(xData(1), xData(end), 10*length(xData));
new_yData = linspace(yData(1), yData(end), 10*length(yData)).';
new_zData = interp2(xData, yData, zData, new_xData, new_yData, 'spline');
xData = new_xData; yData = new_yData; zData = new_zData;

h = figure();
surf(xData, yData, zData, 'LineStyle', 'none', 'FaceColor', 'interp');
xlim([xData(1) xData(end)])
ylim([yData(1) yData(end)])
zlim([0 ceil(max(zData(:)))]); 
colormap(jet(4096))
xlabel('mm'); ylabel('mm'); zlabel('ln(Intensity)');
set(gca,'Ydir', 'reverse')
grid on
shading interp
view(3); axis vis3d; camlight; 

% Change x and y tick labels from pixels to mm
addMM = @(x) sprintf('%.1f', x * conversion);
xticklabels(cellfun(addMM,num2cell(xticks'),'UniformOutput',false));
yticklabels(cellfun(addMM,num2cell(yticks'),'UniformOutput',false));

% Find maxium intensity region and plot it
hold on
maxValue = max(zData(:));
[rowsOfMaxes, colsOfMaxes] = find(zData == maxValue);
x_minind = min(colsOfMaxes(:));
x_maxind = max(colsOfMaxes(:));
p = zeros(1, 2);
p(1) = plot3(linspace(xData(x_minind), xData(x_minind), ...
   length(yData)), yData, zData(:, x_minind), 'Linestyle', '-.', ...
   'Color', 'black', 'LineWidth', 2.0);
p(2) = plot3(linspace(xData(x_maxind), xData(x_maxind), ...
   length(yData)), yData, zData(:, x_maxind), 'Linestyle', '-.', ...
   'Color', 'black', 'LineWidth', 2.0);
hold off
legend(p(1), 'Estimated width of maximum intensity', 'Location', 'North')
set(gca, 'FontSize', 14)
...