24小时热门版块排行榜    

查看: 598  |  回复: 2

chaofan1231

银虫 (小有名气)

[求助] 图像最高点坐标提取

我想计算这幅图像上最高点的坐标,黑色部分都为0,我的程序是通过循环搜索来进行 的,但是不知道为什么总是得到图像最低点的数据(350)?哪位大神帮帮忙哈!程序如下:
clear;clc;
I=imread('F:\1.jpg'); %读取图像
J=rgb2gray(I);
[m,n]=size(J); %%% m表示图像高度350,n为图像宽度688
for y=1:m %%% y表示列数
for x=1:n
if J(y,x)~=0
break %%%% 图像坐标体系是左上角原点,左边Y轴,上边X轴
end
end
end
H=y




[ 来自科研家族 化工工程工艺 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
chaofan1231: 金币+2, ★★★很有帮助, 非常感谢 2012-07-19 17:02:14
用 [r,c]=find(J)
按列搜索J,  r给出非零元素的行号,c给出列号。按你所需要的,r中最小的值min(r)就是行号最小的,也就是最高的点所在行.
showmethemoney
2楼2012-07-19 15:48:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

感谢参与,应助指数 +1
楼主的问题在于,双重循环最内层的break只能跳出内层循环,这时候需要一个flag来判断是否满足条件,继续跳出外层循环即可.

当然,最简单还是用楼上的办法,find后找到row的最小值即可,

你可以自己比较下
CODE:
% 第一种办法:循环
a = imread('1243032_1342677268_442.jpg');
b = rgb2gray(a);
[m,n] = size(b);
flag = 0;
for y=1:m
    for x=1:n
        if b(y,x)~=0
            y
            flag = 1;
            break;
        end
    end
    if flag
        break;
    end
end

% 第二种办法:find函数
[row,col] = find(b);
y = min(row)

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
3楼2012-07-19 16:29:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 chaofan1231 的主题更新
信息提示
请填处理意见