フィルターのクリア

Is there a technique to merge two peaks into one peak at the midpoint?

2 ビュー (過去 30 日間)
장훈 정
장훈 정 2023 年 8 月 31 日
回答済み: Mathieu NOE 2023 年 8 月 31 日
Is it possible to merge two peaks into one through image processing methods or techniques such as matrix averaging or clustering?
What I want is to see a single peak in the middle of that location.
load('data.mat')
figure
subplot 121
imagesc(data);
subplot 122
surf(data);
An additional question is, can I use a CNN to detect the yellow areas and merge them together like I want?

採用された回答

Mathieu NOE
Mathieu NOE 2023 年 8 月 31 日
hello
maybe this ? (a low tech approach...)
load('data.mat')
[m,n] = size(data);
%% find the two peaks location
MinPeakH = 0.5*max(data,[],'all');
[pks,locs_y,locs_x]=peaks2(data,'MinPeakHeight',MinPeakH);
% isolate each peak by 2D gaussian filter
dx = diff(locs_x);
dy = diff(locs_y);
dd = sqrt(dx^2+dy^2);
%Gaussian filter
x = 1:n;
y = 1:m;
sigma = dd/2;
% first peak
x01 = locs_x(1);
y01 = locs_y(1);
[X,Y] = meshgrid(x,y);
g = exp(-((X-x01).^2+(Y-y01).^2)./(2*sigma^2));
data1 = data.*g;
% second peak
x02 = locs_x(2);
y02 = locs_y(2);
[X,Y] = meshgrid(x,y);
g = exp(-((X-x02).^2+(Y-y02).^2)./(2*sigma^2));
data2 = data.*g;
%% re-centering the data to the mid point
% mid point between two peaks
xm = round(mean(locs_x));
ym = round(mean(locs_y));
figure
subplot 131
imagesc(data); hold on
plot(locs_x,locs_y,'+r','markersize',25);
plot(xm,ym,'+k','markersize',25);
subplot 132
imagesc(data1);
subplot 133
imagesc(data2);
% shift peak1 data
sx = xm - x01; % x shift move
sy = ym - y01; % y shift move
data1s = ones(m,n)*min(data,[],'all');
data1s(1+sx:m,1+sy:n) = data1(1:m-sx,1:n-sy);
% shift peak2 data
sx = -xm + x02; % x shift move
sy = -ym + y02; % y shift move
data2s = ones(m,n)*min(data,[],'all');
data2s(1:m-sx,1:n-sy) = data2(1+sx:m,1+sy:n);
figure
subplot 131
imagesc(data); hold on
plot(locs_x,locs_y,'+r','markersize',25);
plot(xm,ym,'+k','markersize',25);
subplot 132
imagesc(data1s); hold on
plot(xm,ym,'+k','markersize',25);
subplot 133
imagesc(data2s); hold on
plot(xm,ym,'+k','markersize',25);
% mean of both shifted datas
datas = (data1s+data2s)/2;
figure
subplot 121
imagesc(data); hold on
plot(locs_x,locs_y,'+r','markersize',25);
plot(xm,ym,'+k','markersize',25);
subplot 122
imagesc(datas); hold on
plot(xm,ym,'+k','markersize',25);

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeNetworks についてさらに検索

製品


リリース

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by