How can I centre points of interest in an image before it's cropped and saved?

조회 수: 1 (최근 30일)
Hi folks,
I've successfully managed to crop segmented elements from an image into several images, but I'm now trying to reduce as much of the black background as possible. Below are my code, the base image with the segmented mesh and an example of a cropped section. Any help would be appreciated!
clc; close all;
img = imread('29_11_2019_164105.jpg');
pathName = "C:\Users\ezxtg4\Downloads\JPEG pics\crops\";
[counts, ~] = imhist(rgb2gray(img), 255);
T = otsuthresh(counts);
BW = imbinarize(rgb2gray(img), T);
BW2 = bwareaopen(BW, 3000);
BW2 = imfill(BW2, 'holes');
BW2 = bwperim(BW2);
BW2 = imdilate(BW2, ones(5));
BW2 = imerode(BW2, ones(3));
[L, n] = bwlabel(BW2);
for i = 1:n
I4 = L==i;
I5 = imfill(I4,'holes');
I6 = img.*repmat(uint8(I5),[1 1 3]);
I6 = imclearborder(~I6);
imwrite(I6, fullfile(pathName, sprintf('crop %d.jpeg', i)));
end
  댓글 수: 4
darova
darova 2020년 2월 19일
You want to crop the image or to center?
Teshan Rezel
Teshan Rezel 2020년 2월 19일
sorry I wasn't clear about that! I'd like to perform the former operation, so cropping please

댓글을 달려면 로그인하십시오.

채택된 답변

darova
darova 2020년 2월 19일
편집: darova 2020년 2월 19일
You previous code was ok i think. Just made some changes
[ii,jj] = find(I5);
% calculate boundaries
i1 = min(ii); % min row
i2 = max(ii); % max row
j1 = min(jj); % min column
j2 = max(jj); % max column
% ...
I7 = imcrop(I6,[j1 i1 j2-j1 i2-i1]); % cropped image
EDITED: made a mistake in imcrop(I,[xmin ymin width height])

추가 답변 (0개)

제품


릴리스

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by