我通过impoly('Closed', true)
在图片上创建一个封闭区域,最后在Matlab命令行中标记掩码BW = createMask(h)
的区域之后。
在图中为掩码标记点之前的初始命令
imshow('contour.png');
h = impoly('Closed',true);
在这里,我使用了下面的 nkjt 答案。 要通过函数 conditionalRemoval(图像,区域)
过滤的图片
然后,我跑
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 :(得分:1)
由此:
impoly>生成数据> function createfigure1
你的意思是在调用impoly之后,你进入图窗口并选择“Generate Code”?这将创建一个函数createfigure
- 但这与impoly
无关。
有几种方法可以提取投资回报率
在选择具有impoly
的区域之后,在关闭数字之前:
BW = createMask(h);
或者您可以使用getPosition
提取位置,然后使用roipoly
。
答案 1 :(得分:0)
最后一个问题出在函数 conditional_removal 和创建 randn_logical_matrix 。
randn 的matlab文档说
RN = distributed.randn(...,classname)指定的类 分布式阵列D.有效选择与常规选择相同 randn函数:'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
和轮廓
和网格
这似乎是好的解决方案。 为了改进,我认为应该计算情况的规范,然后 conditional_removal 算法相应地改进。