MATLAB 회사인 mathworks에서 제공하고 있는 매트랩 코딩 커뮤니티로,
매트랩 관련 코딩테스트 문제들을 제공하고 있다.
매스웍스 회사뿐만 아니라 사용자가 코딩 테스트 문제를 내고 다른 사람이 풀도록 할 수도 있다.
매트랩 코드가 익숙하지 않은 사람들에게 추천하는 사이트다.
매스웍스 계정이 있어야 이용 가능하며, 대부분 문제들이 무료다.
(아직 모든 문제를 본 것이 아니어서 정확하지 않음)cody 사이트 : https://kr.mathworks.com/matlabcentral/cody/
A grayscale image is represented as a matrix in MATLAB. Each matrix element represents a pixel in the image. An element value represents the intensity of the pixel at that location.
Create a cropped image matrix Icrop using inputs given in the following order:
I - Grayscale input image
Rmin - Lowest row number to retain
Cmin - Lowest column number to retain
Rpix - Number of pixels along rows to retain
Cpix - Number of pixels along columns to retain
For example, if your image was:
I = [1 2 3 4 5 6 7 8]
And you called crop_image with inputs
Icrop = crop_image(I, 2, 2, 1, 3)
The output Icrop should be
[6 7 8]
SOUTION
function Icrop = crop_image(I, Rmin, Cmin, Rpix, Cpix) Icrop = I; end
문제 링크
Crop an Image 문제는 MATLAB Onramp Practice 그룹의 difficulty 2단계 문제다.
문제는 크롭된 이미지의 값을 주어진 input을 이용해 계산하는 함수를 작성하는 내용이다.
이미지 처리가 나와서 처음에는 당황했지만,
깊게 살펴보면 행렬 인덱싱 이해를 보고자 하는 문제임을 알 수 있다.
문제에 나온 이미지를 살펴보기 보다는 함수에 들어가는 인풋값으로 어떻게 원하는 아웃풋을 구현할 수 있는가를 생각하는 것이 더 중요하다.
문제 태그도 indexing과 matrix manupulation이 달려있다.
function Icrop = crop_image(I, Rmin, Cmin, Rpix, Cpix) Icrop = I(Rmin:(Rpix+Rmin-1), Cmin:(Cpix+Cmin-1)); end
1. 주어진 I 행렬 값이 이미지 내에서 각 위치의 픽셀값임을 알았다.
즉, input으로 주어진 I 행렬의 각 요소들의 개별 값이 중요한 것이 아닌, row와 column으로써의 위치가 더 중요하다.
2. 크롭된 이미지는 Rmin, Cmin에서 시작한다.
즉, I에서 row와 column의 시작 인덱스는 Rmin, Cmin이다.
3. 크롭된 이미지의 길이는 Rpix, Cpix이다.
즉, Rmin에서 Rpix까지의 길이를 더한 row, Cmin에서 Cpix까지의 길이를 더한 column 인덱스가 각각 I에서 크롭된 이미지가 갖는 행렬이 된다.
4. Rmin, Cmin 위치를 포함하여 Rpix, Cpix가 계산되므로, Rmin+Rpix-1, Cmin+Cpix-1이 크롭된 이미지가 갖는 행렬값의 위치 인덱스가 된다.
최근 인덱스와 시퀀스를 헷갈리고 있는 문제를 발견했고,
매트랩의 행렬과 벡터 구조에 친숙하지 않아서 계속 코드를 잘못 구현하고 있는 상황이었기에 행렬 인덱싱에 대해 다시 생각해 볼 수 있는 좋은 문제였다.