필터 지우기
필터 지우기

Reading Multiple Images Using For Loop

조회 수: 6 (최근 30일)
Mark Coughlin
Mark Coughlin 2020년 10월 25일
댓글: dpb 2020년 10월 25일
Hi,
I am trying to use a for loop to read 4 images (of the format 1.jpg,2.jpg etc...) and then calculate the value and location of the minimum pixel of each image. Below is the code I have so far:
RGB=cell(1,4);
for i=1:4
RGB{i}=imread(sprintf('%d.jpg',i)); %Converting the image in to a RGB matrix
gray{i}=rgb2gray(RGB{i}); %Converting the RGB image to grayscale
gray_double{i}=double(gray{i}); %Changing from uint8 format to double
Min_pixel{i}=min(gray_double{i}(:)); %Finding the minimum pixel value
[row, column] = find(gray_double == Min_pixel,1);%Finding location of first minimum
end
The code works up until Line 8 where it struggles to obtain the minimum pixel value. Is there an easier way to do this?
Once again, any help would be much appreciated!
Thank you

채택된 답변

dpb
dpb 2020년 10월 25일
편집: dpb 2020년 10월 25일
RGB=cell(4,1);
gray=cell(4,1);
Min_loc=cell(4,1);
for i=1:4
RGB{i}=imread(sprintf('%d.jpg',i));
gray{i}=rgb2gray(RGB{i}); % Convert the RGB image to grayscale
[Min_pixel{i},i_loc]=min(gray{i}(:)); % Find the minimum pixel value, location of first
[r,c]=ind2sub(size(gray{i}),i_loc); % Convert linear index to row, column
Min_loc{i}=[r,c]; % return to cell array for image
end
There's no need to convert to double(); integer values will be the same as floats as as integers.
Just let min return the location for you using optional second output argument.
  댓글 수: 6
dpb
dpb 2020년 10월 25일
편집: dpb 2020년 10월 25일
You couldn't execute that loop until after the first is done. Plus, you've reused i for a second loop index inside the first loop.
You could, compare each in turn to the previous inside the loop if you only begin the comparison on the second time through the loop.
NB: What you're locating here is the FIRST minimum in the image in column-major order -- presuming that there's necessarily a correlation between that location in subsequent images that relate to some specific feature is a stretch/major assumption of how the images may change.
dpb
dpb 2020년 10월 25일
Also, what is returned for the location is [r,c], the row/column of the location for the minimum. You would need to look at both row and column; the difference between them would be how many rows/columns difference there is between images but a distance would need be the vector magnitude between those points.
This again, however, still assumes that the location that is found searching serially through the image has some relationship to each location on the subsequent images. That still seems a strong assumption to make.

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

추가 답변 (0개)

Community Treasure Hunt

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

Start Hunting!

Translated by