我在MATLAB中有一个RGB图像,我想循环遍历每个像素并检查它是否是肤色(ish)[我可能会在以后的HSV空间中这样做以消除光照等的影响]
有谁知道最好的方法吗?MATLAB奇怪的语法让我有点困惑!
目前我有:
for x = 1:size(I,1)
for y = 1:size(I,2)
%Get the value from this x,y coordinate and check the colour.
end
end
但我认为这是非常错误的.
如何正确访问矩阵的不同部分?
例如,输出>>w = whos;返回结构数组.我想构造一个数组,其元素是每个结构中特定字段名称的标量.
这样做最明显的方法并不是按照我的意愿返回数组,而是分别回答每个数组.
>> w(1:2).bytes
ans =
64
ans =
128
Run Code Online (Sandbox Code Playgroud)
我可以用循环来做,但是想知道是否有更好的方法.
我想在循环中调用(执行)一个m文件(函数),如下所示:
global m, r
m = 2;
for n = 2:10;
for r1 = 0:n-m;
r2 = n-m-r1;
r = [r1,r2];
[Call the function here?????????]
end
end
Run Code Online (Sandbox Code Playgroud)
这是功能:
function main
x0 = [-0.5403,0.5471];
fsolve(@fcn,x0)
function z = fcn(X)
rand('twister',5409);
global m, r
a = rand(m,1);
for i = 1:m
sm(i) = 0.0;
for l = m-i+1:m
sm(i) = sm(i)+r(l);
end
s = 1.0/(i+sm(i));
g(i) = (a(i))^s;
end
prod = 1.0;
for k = 1:m
prod = prod * g(m+1-k);
u(k) …Run Code Online (Sandbox Code Playgroud) 我需要在已加载的图像中绘制一个三角形.三角形应如下所示:
1 0 0 0 0 0
1 1 0 0 0 0
1 1 1 0 0 0
1 1 1 1 0 0
1 1 1 1 1 0
1 1 1 1 1 1
Run Code Online (Sandbox Code Playgroud)
但我遇到的主要问题是我不知道如何创建这样的矩阵.我想将此矩阵与图像相乘,图像矩阵由3个参数(W,H,RGB)组成.
我想在同一图中有一个线图和一条彩色线下的图形(置信区间).
我怎样才能在MATLAB中做到这一点?
我已经尝试了以下,但它不起作用(它只显示区域):
plot(theta, p_prior_cum)
area(theta(50:70), p_prior_cum(50:70))
axis([0 1 0 1])
Run Code Online (Sandbox Code Playgroud) 我在MATLAB中使用系统命令如下(当前目录是'脚本'):
[status, result] = system('cd ..\\TxtInOut')
Run Code Online (Sandbox Code Playgroud)
但是,调用系统命令似乎不起作用.它返回status = 0和result = ''.
有什么建议?
我想在MATLAB中调用以下bash命令:
grep "Up to" ~/test_linux/vision1.1/log | awk '{print $7}'
Run Code Online (Sandbox Code Playgroud)
我system()在MATLAB中使用,但结果却有错误:
>> [status string]=system('grep "Up to" ~/test_linux/vision1.1/log | awk '{print $7}' ');
??? [status string]=system('grep "Up to" ~/test_linux/vision1.1/log | awk '{print $7}' ');
Error: Unbalanced or unexpected parenthesis or bracket.
Run Code Online (Sandbox Code Playgroud)
我是否需要在bash命令中将某些特殊字符作为字符串在MATLAB中转义?
我在MATLAB两个矩阵让说arr1和arr2尺寸1000*1000的每一个.我想比较它们的元素并将结果保存在resarr1000*1000 的结果矩阵中,以便每个元素:
arr1大于in arr2,则将值1放在结果中arr2更大,则存储值2但是我不想用for循环来做这个,因为那个更慢.我怎样才能做到这一点?
编辑:
另外,如果我想不同的RGB值存储在一个1000×1000×3矩阵的结果,取决于比较arr1和arr2,可以在不慢的循环来实现?
例如,store(255,0,0)if arr1更大,(0,255,0)if arr2更大
我有两个数据阵列,我正试图合并.一个包含来自第一列实验的实际延迟(例如0.345,0.455 ...从不超过3个小数位),以及该实验的其他数据.另一个包含有效的"查找"延迟列表,范围从0.001到0.500,以0.001为增量,以及其他数据.两个数据集都是X-by-Y双精度数.
我想做的是......
for i = 1:length(actual_latency)
row = find(predicted_data(:,1) == actual_latency(i))
full_set(i,1:4) = [actual_latency(i) other_info(i) predicted_info(row,2) ...
predicted_info(row,3)];
end
Run Code Online (Sandbox Code Playgroud)
...为了找到predicted_data查找延迟对应于实际延迟的相关行.然后我用它来创建一个合并的数据集full_set.
我想这将是非常简单的,但查找功能一直被扔了寻找一个实际的等待时间,我当空矩阵未能知道是predicted_data(:,1)(因为我已经双重检查调试期间).
此外,如果我用for循环替换find来做同样的工作,我会得到类似的错误.它似乎不是系统性的 - 使用不同的参与者数据集会在不同的地方引发它.
此外,在调试模式下,如果我使用find来尝试查找硬编码值actual_latency,它并不总是有效.有时是,有时没有.
我真的对此感到头疼,所以如果有人对可能发生的事情有任何想法,我会非常感激.
给出以下示例:
>> I=[2 1 3;3 2 4]
I =
2 1 3
3 2 4
>> I(:)
ans =
2
3
1
2
3
4
>> I(1:2)
ans =
2 3
Run Code Online (Sandbox Code Playgroud)
为什么I(:)在I(1:2)返回较短的行向量时返回列向量?