#matlab #fits
#matlab #подходит
Вопрос:
У меня есть следующее изображение в формате fits. Я хочу удалить все звезды и другие более мелкие точки с этого изображения с помощью matlab.
Я выполнил следующие операции matlab, чтобы удалить в нем звездочки.
I = imread('NGC_0253.jpg');
if size(I,3)==3
I=rgb2gray(I);
end
K = imcomplement(I);
L = I-K;
M = medfilt2(L);
imshow(M)
Я получаю изображение, подобное этому:
Я также пытаюсь выполнить следующее:
I = imread('NGC_0253.jpg');
if size(I,3)==3
I=rgb2gray(I);
end
K = imcomplement(I);
L = I-K;
M = bwareaopen(L,1000);
N = medfilt2(M);
imshow(N)
но это также не удовлетворяет меня:
Что не является моей целью. Моя цель состоит в том, чтобы удалить все звезды с изображения.
Итак, что я должен сделать, чтобы удалить все звезды, оставив галактику неповрежденной с изображения?
Комментарии:
1. Просто сообщаю вам: это очень хороший вопрос в SO, спасибо, что приложили усилия, чтобы правильно задать вопрос и показать, что вы пробовали.
Ответ №1:
Используя bwareaopen
, я получаю хороший результат. (Я использую ваше второе изображение в качестве входных данных, чтобы вы могли сохранить первую часть своего кода)
I = imread('NGC_0253.jpg');
I = im2bw(I,0.5); %the second parameter correspond to the threshold ∈ [0-1]
I = ~bwareaopen(~I,400); %where 400 = the minimal number of connected pixel needed to not be removed.
imshow(I)
ВХОДНЫЕ ДАННЫЕ:
ВЫВОД:
Улучшение:
Чтобы быть более точным, может быть полезно вычислить параметры эллипса.
Для этого вы можете использовать функцию fit_ellipse
, доступную в fileexchange.
Iedge = edge(mat2gray(I),'Canny');
[x,y] = find(Iedge');
hold on
A = fit_ellipse(x,y,h);
Комментарии:
1. быстрый и эффективный, мне это нравится!
2. Это также убрало тень галактики, которую не нужно удалять.
3. @AnStudent тогда вам следует изменить
level
. Смотрите документацию наim2bw
.