How to remove image margins

조회 수: 12 (최근 30일)
lech king
lech king 2021년 3월 30일
편집: Esen Ozbay 2021년 3월 31일
After extracting the required parts from a CT scan, I also intend to remove the extra margins of the image (black parts around the lungs)
I understand that I can add the contents of rows or columns one by one with command for and delete the first non-zero row or column, but it seems that using command for has a high computational load. Do you have any other suggestion to solve this problem?

채택된 답변

Esen Ozbay
Esen Ozbay 2021년 3월 30일
편집: Esen Ozbay 2021년 3월 30일
Let your array be called CTscan, and be a 1024x1024 matrix.
If you know how many columns you want to delete (let's say 21), you can do this to delete the first 21 columns:
CTscan(:, 1:21) = [];
Then, you will have a 1024x1003 matrix.
You can also do the same for rows. To delete the first 23 rows of CTscan:
CTscan(1:23, :) = [];
Then, you will have a 1001x1003 matrix.
To delete the last 21 columns:
CTscan(:, end-20:end) = [];
  댓글 수: 3
Esen Ozbay
Esen Ozbay 2021년 3월 31일
편집: Esen Ozbay 2021년 3월 31일
To detect the location of the margins automatically, I can suggest the following:
% Delete zero columns (leave a margin of 10 elements)
temp = sum(CTScan>0, 1); % Find the number of nonzero elements in each column
nonZeroColumnIndices = find(temp>0); % Find columns that have at least 1 nonzero element
CTScan = CTScan(:, nonZeroColumnIndices(1)-10:nonZeroColumnIndices(end)+10);
% Delete zero rows (leave a margin of 10 elements)
temp = sum(CTScan>0, 2);
nonZeroRowIndices = find(temp>0);
CTScan = CTScan(nonZeroRowIndices(1)-10:nonZeroRowIndices(end)+10,:);
Hope this helps!
lech king
lech king 2021년 3월 31일
It was really great
Thank you very much for your kindness
This is exactly what I was looking for

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

추가 답변 (1개)

KSSV
KSSV 2021년 3월 30일
Let I be your image and say you want to extract image from row0 to row1 and col0 to col1..
I_extract = I(row0:row1,col0:col1,:) ;
  댓글 수: 2
lech king
lech king 2021년 3월 30일
편집: lech king 2021년 3월 30일
thank you
But if it was just a number of photos, it would be possible, but the problem is that I intend to do this for 20,000 photos, in which case the location of the margins is different.
Basically the problem is that first we have to identify the location of the extra margins (it is different in each photo) and second we have to remove them
KSSV
KSSV 2021년 3월 30일
편집: KSSV 2021년 3월 30일
I = imread('image.jpeg') ;
I1 = rgb2gray(I) ;
[y,x] = find(I1==0) ;
x0 = min(x) ; x1 = max(x) ;
y0 = min(y) ; y1 = max(y) ;
I = I(y0:y1,x0:x1,:) ;

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

제품

Community Treasure Hunt

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

Start Hunting!

Translated by