Nhiệm vụ chính là loại bỏ nền phức tạp của lá và trích xuất lá mục tiêu từ hình ảnh lá bị tắc trong MATLAB. Để loại bỏ nền tôi đã áp dụng K-nghĩa là phân cụm bản ngã. Bây giờ nhiệm vụ chính là phân đoạn lá từ một chiếc lá bị tắc bằng thuật toán phân đoạn lưu vực. Tôi không thể tìm thấy các phân đoạn hoàn hảo cho từng chiếc lá đơn lẻ. Làm ơn giúp tôi. Tôi đã tải lên các hình ảnh mẫu và mã phân đoạn lưu vực đầu nguồn.Thuật toán phân đoạn lưu vực để phân đoạn lá bị tắc trong matlab
ORIGINAL IMAGE
Hình ảnh sau khi loại bỏ nền sử dụng thuật toán phân nhóm K-Phương tiện và nguồn phân khúc chồng lên ảnh gốc
Tôi muốn chiếc lá giữa chính là một phân khúc duy nhất để tôi có thể giải nén nó.
tôi đã đưa ra mã nguồn Phân khúc dưới
function wateralgo(img)
F=imread(img);
F=im2double(F);
%Converting RGB image to Intensity Image
r=F(:,:,1);
g=F(:,:,2);
b=F(:,:,3);
I=(r+g+b)/3;
imshow(I);
%Applying Gradient
hy = fspecial('sobel');
hx = hy';
Iy = imfilter(double(I), hy, 'replicate');
Ix = imfilter(double(I), hx, 'replicate');
gradmag = sqrt(Ix.^2 + Iy.^2);
figure, imshow(gradmag,[]), title('Gradient magnitude (gradmag)');
L = watershed(gradmag);
Lrgb = label2rgb(L);
figure, imshow(Lrgb), title('Watershed transform of gradient magnitude (Lrgb)');
se = strel('disk',20);
Io = imopen(I, se);
figure, imshow(Io), title('Opening (Io)');
Ie = imerode(I, se);
Iobr = imreconstruct(Ie, I);
figure, imshow(Iobr), title('Opening-by-reconstruction (Iobr)');
Ioc = imclose(Io, se);
figure, imshow(Ioc), title('Opening-closing (Ioc)');
Iobrd = imdilate(Iobr, se);
Iobrcbr = imreconstruct(imcomplement(Iobrd), imcomplement(Iobr));
Iobrcbr = imcomplement(Iobrcbr);
figure, imshow(Iobrcbr), title('Opening-closing by reconstruction (Iobrcbr)');
fgm = imregionalmin(Iobrcbr);
figure, imshow(fgm), title('Regional maxima of opening-closing by reconstruction (fgm)');
I2 = I;
I2(fgm) = 255;
figure, imshow(I2), title('Regional maxima superimposed on original image (I2)');
se2 = strel(ones(7,7));
fgm2 = imclose(fgm, se2);
fgm3 = imerode(fgm2, se2);
fgm4 = bwareaopen(fgm3, 20);
I3 = I;
I3(fgm4) = 255;
figure, imshow(I3), title('Modified regional maxima superimposed on original image (fgm4)');
bw = im2bw(Iobrcbr, graythresh(Iobrcbr));
figure, imshow(bw), title('Thresholded opening-closing by reconstruction (bw)');
D = bwdist(bw);
DL = watershed(D);
bgm = DL == 0;
figure, imshow(bgm), title('Watershed ridge lines (bgm)');
gradmag2 = imimposemin(gradmag, bgm | fgm4);
L = watershed(gradmag2);
I4 = I;
I4(imdilate(L == 0, ones(3, 3)) | bgm | fgm4) = 255;
figure, imshow(I4), title('Markers and object boundaries superimposed on original image (I4)');
Lrgb = label2rgb(L, 'jet', 'w', 'shuffle');
figure, imshow(Lrgb), title('Colored watershed label matrix (Lrgb)');
figure, imshow(I), hold on
himage = imshow(Lrgb);
set(himage, 'AlphaData', 0.3);
title('Lrgb superimposed transparently on original image');
end
@Phonon Xin lỗi mã đã bị thụt lề kém nhưng hãy giúp tôi giải pháp. –
bạn đang cố trích xuất lá nào? – vini
Trong phạm vi điều kiện môi trường nào, thuật toán phân đoạn lá của bạn thực hiện? Bạn có bất kỳ sự kiểm soát nào không? Liệu nó hoàn toàn phải sử dụng một thuật toán đầu nguồn? Tôi không chắc chắn thông tin về độ dốc có đủ mạnh để cung cấp cho bạn một giải pháp mạnh mẽ hay không. Bạn có thể muốn một thuật toán hoặc mô hình cho phép bạn triển khai các chuyên gia mạnh hơn. Hình dạng của lá khá rập khuôn, vì vậy có lẽ nhìn vào một mô hình biến dạng có thể là thích hợp. Nếu thời gian là ngắn, có lẽ một cách tiếp cận heuristic dựa trên phát triển khu vực có thể cung cấp cho bạn một số kết quả nhanh chóng? –