2013-11-23 1 views
-2

Я создаю закрытую область на картинке на impoly('Closed', true) и, наконец, после маркировки области для маски BW = createMask(h) в командной строке Matlab. Начальные команды, прежде чем маркировка точек для маски на рисункеПрименение функции через маску на изображении

imshow('contour.png'); 
h = impoly('Closed',true); 

Здесь я использовал ответ nkjt в ниже. Картина быть отфильтрованы с помощью функции conditionalRemoval (изображение, область)

enter image description here

Затем я бегу

image = imread('contour.png'); 
areaLazyRemoval = BW; 
image = conditional_removal(image, areaLazyRemoval); 

теперь у меня есть mask и картину. Я должен применить функцию conditional_removal к ним.

Как вы можете использовать эту маску сейчас и применить к ней функцию в отмеченной области?

Моя функция conditional_removal «ы псевдокод

function [ image ] = conditional_removal(image, areaLazyRemoval) 
    % dim image 794 x 1001 x 3 uint 
    % dim areaLazyRemoval 794 x 1001 logical 
    image(:,:,1) .* areaLazyRemoval; % TODO wrong operator here! 
    % all pixels marked by logical ones in areaLazyRemoval should get lazyRemoval applied 
    % else greedyRemoval so zero 
    % 
end 
%%%%%%%%%%%%%%%%%%%%%%% 
% lazy removal function 
% so remove by 50% chance the thing 
function pixel = lazyRemoval(pixel) 
if randn > 0 
    pixel = 0; 
end 
% TODO how to apply pixel-wise removal to the logical matrix and image? 

Как вы можете применить пиксель-накрест удаление к изображению с помощью логической матрицы, маска?

+0

Вам необходимо передать данные в 'createfigure', чтобы построить его. Что такое код для 'createfigure'? – Daniel

+0

@ DanielR Это одно: https://dl.dropboxusercontent.com/u/62073194/createfigure.m –

+0

Я представил пример SSCCE проблемы, так что вы можете воспроизвести проблему. В настоящее время существует минимальная картина проблемы, код, как она создается, код, как она используется, и Ошибка. –

ответ

1

К этому:

impoly> Создать> Функция Data createfigure1

ли вы имеете в виду после вызова impoly, вы идете в окно фигуры и выберите "Generate Code"? Что создаст функцию createfigure - но это не имеет никакого отношения к impoly.

Существует несколько способов извлечь ROI.
После выбора области с impoly, перед закрытием фигуры:

BW = createMask(h);

Или вы можете извлечь позицию getPosition, а затем использовать roipoly.

+0

Проблема в том, что если я пытаюсь использовать ** BW = createMask (h) **, я не могу ничего вводить, когда фигура активна: https://dl.dropboxusercontent.com/u/62073194/Screen%20Shot%202013 -11-25% 20at% 2014.25.30.png Можете ли вы привести пример, как вы можете использовать ** getPostion ** и ** roipoly ** сейчас, пожалуйста. –

+0

Это потому, что вы вызываете 'position = wait (h);' Вам нужно? – nkjt

+0

Мне не нужна команда. Это была ошибка, и я этого не заметил. Большое спасибо за ваш ответ! Я обновил тело, чтобы теперь рассмотреть главную проблему, как применить функцию через маску на изображении. –

0

Последние проблемы были в функции conditional_removal и в создании randn_logical_matrix.

Matlab документы из randn говорит

RN = distributed.randn (..., имя_класс) определяет класс распределенного массив D. Действительно выбора такого же, как для регулярного randn function: 'double' (по умолчанию), 'single', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64' и 'uint64'.

Таким образом, это говорит о том, что оно не поддерживается непосредственно существующими функциями.

Так что моя попытка сделать этот логический генератор случайных чисел и применение функции через маску

clear; 
close all; 
image = imread('contour.png'); 
load('mask_1.mat'); 
areaLazyRemoval = BW; 
image = image(:,:,1); 
image = conditional_removal(image, areaLazyRemoval); 
image = double(image); 
contour(image); 
colorbar; 
caxis([-2,1.5].*10^7); 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
function matrix = make_random_logical_matrix(matrix) 

[row_max,column_max] = size(matrix); 
matrix = randn(row_max,column_max); 
for row = 1:row_max 
    for column = 1:column_max 
     t = randn; 
     if t >= 0 
      matrix(row,column) = 0; 
     end 
     if t < 0 
      matrix(row,column) = 1; 
     end 
    end 
end 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

function [ image ] = conditional_removal(image, areaLazyRemoval) 
    random_logical_matrix = make_random_logical_matrix(areaLazyRemoval); 
    areaLazyRemoval = areaLazyRemoval .* random_logical_matrix; 
    areaLazyRemoval = uint8(areaLazyRemoval); 
    image = image(:,:,1) .* areaLazyRemoval; 
end 

и контур

enter image description here

и сетки

enter image description here

который кажется одобренным решением. Чтобы улучшить, я думаю, что норма ситуации должна быть рассчитана, а затем улучшен соответствующий алгоритм .

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

  • Нет связанных вопросов^_^