2013-09-13 1 views
0

Im, ищущий изображение в Matlab большого черного прямоугольника с 9 маленькими кружками, расположенными в виде матрицы 3x3, выровненной в центре прямоугольника, т.е. центр круга будет иметь свою середину в центре квадрата.Создание изображения в матлабе из 9 маленьких белых кругов на большом черном квадрате

Мне нужны круги, равномерно расположенные друг от друга на некотором расстоянии между каждым кругом и между внешними кругами и границей прямоугольника (подумайте о квадратной бумаге с 9 отверстиями, размещенными в ней, наколов ее ручкой). Мне нужно это, чтобы я мог видеть, как свертка изображения с использованием 2D-гауссова исказит это изображение.

Однако я относительно новичок в Matlab и пытаюсь создать это изображение. Я успешно сделал черно-белый квадрат и белый круг на черном квадрате, который занимает большую часть площади, но я не могу сделать маленький белый круг в любом желаемом месте на черном квадрате, не говоря уже о нескольких небольших кругах в конкретное выравнивание.


Это то, что я использовал, чтобы создать черный квадрат с большим кругом:

X = ones([100,1])*([-50:49]); 
Y = ([-50:49]')*(ones([1,100])); 
Z = (X.^2)+(Y.^2); 
image = zeros([100 100]); 
image(find(Z<=50^2)) = 1; 
imshow(image) 
+1

Эй , знаете ли вы, какие пункты и с какой целью они служат? Его довольно сложно даже попытаться прочитать то, что вы написали ... – Werner

+0

также было бы полезно, если бы вы включили иллюстрацию, может быть, даже одну нарисованную рукой в ​​Paint или что-то в этом роде. – Amro

+0

Просьба дать более подробную информацию о том, что вы пробовали и какие ваши конкретные проблемы где. – Chronial

ответ

1

Если я правильно понял, то попробуйте следующее:

% size of each small box. Final image will be 3Nx3N 
N = 100; 

% create a circle mask 
t = linspace(0,2*pi,50); % approximated by 100 lines 
r = (N-10)/2;    % circles will be separated by a 10 pixels border 
circle = poly2mask(r*cos(t)+N/2+0.5, r*sin(t)+N/2+0.5, N, N); 

% replicate to build image 
img = repmat(circle, 3,3); 
subplot(121), imshow(img) 

% after applying Gaussian filter 
h = fspecial('gaussian', [15 15], 2.5); 
img2 = imfilter(im2double(img), h); 
subplot(122), imshow(img2) 

image

+0

Это именно то, что я хотел, спасибо вам большое. Amro! –

Смежные вопросы