24小时热门版块排行榜    

查看: 451  |  回复: 1

似水卻有痕

新虫 (初入文坛)

[求助] 图像清晰度评价代码出错,求指点 已有1人参与

clc,clear all,close all;
A=cell(12,1);
B=zeros(12,1);
for x=1:12
    url=strcat('E:\material\blurry\',num2str(x));
    imageurl=strcat(url,'.jpg');
    A=imread(imageurl);
end
   
  
m=715;
n=715;
ff5=0;
Threshold=0;
for x=1:12
for i=2m-2)
    for j=2n-1)
        
         h1=uint32(A{x,1}(i,j));
         h2=uint32(A{x,1}(i+2,j));
         if uint32((h1-h2)^2)>Threshold
             ff5=ff5+1;
         end
    end
end
ff5=ff5./(m*n);
disp(ff5)
B[x-1,1]=ff5;
disp(B)
end
以上使用Matlab编的代码,用的Benner算法,输入的是12幅715*715的图像,我想把结果放入一个B矩阵中,但是出现错误,求高手帮我改正。
回复此楼

» 猜你喜欢

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

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

zdjj111

金虫 (初入文坛)

【答案】应助回帖

您好,很冒昧打扰您。我想向您求助您仿真用到的模糊离焦图片序列。
我目前正在做自动聚焦,因为很多原因,没有合适的用于编程的图像序列。已经通过各种途径求助,都收效甚微,所以现在很需要离焦-聚焦-离焦图像序列。

我看了您的程序,发现了几个循环中已经符号使用的错误。
首先,第一个循环中, A=imread(imageurl)不应该直接被赋值,应该对12个元素分别赋值 A{x,1}=imread(imageurl)。
第二,B[x-1,1]=ff5中的中括号[]应改为小括号(),这是书写方面的错误。而且,矩阵的下标是从1开始,而不是0,所以直接写成x而不是x-1。即最后应该是B(x,1)=ff5。
第三,输出的B不应该放在x循环的内部,应该放在外部。因为,每执行一次x循环,只得到一个B中的元素,要全部执行完毕,B中的元素才都被赋了值。
第四,我觉得ff5=0这句应该放在x大循环的内部,因为对每一幅图片来说,都要从0开始统计大于阈值的像素点数。

修改后的程序如下:
clc,clear all,close all;
A=cell(12,1);
B=zeros(12,1);
for x=1:12
    url=strcat('E:\material\blurry\',num2str(x));
    imageurl=strcat(url,'.jpg');
    A{x,1}=imread(imageurl);
end
   
m=715;
n=715;
Threshold=0;
for x=1:12
    ff5=0;
    for i=2:m-2
        for j=2:n-1
             h1=uint32(A{x,1}(i,j));
             h2=uint32(A{x,1}(i+2,j));
             if uint32((h1-h2)^2)>Threshold
                 ff5=ff5+1;
             end
        end
    end
    ff5=ff5./(m*n);
    %disp(ff5);
    B(x,1)=ff5;
end
disp(B);

另外,是我个人对Brenner算法的理解。
Brenner函数是只在一个方向比如x方向上,对间隔一个单位的两个像素求灰度差的平方,再对所有平方求总和。
您写的程序中,是对所有大于阈值的像素个数求和,所以是不是应该对uint32((h1-h2)^2)求和更准确些。

以上是我个人的想法,打扰您了。
2楼2015-01-31 16:47:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 似水卻有痕 的主题更新
信息提示
请填处理意见