- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图在不使用 imfilter
的情况下过滤图像。我应该得到与 imfilter
相同的结果,但我一直得到不同的结果。谁能告诉我哪里出错了?
orignal=imread('obj6__17.png');
filter=1/9*[-1 -1 -1 ; -1 17 -1 ; -1 -1 -1];
s=size(orignal);
r=zeros(s(1));
temp = zeros(3);
for i= 2: s(1)-1
for j = 2: s(2)-1
for n= 1: 3
for m= 1:3
temp(n,m)=orignal(i+2-n,j+2-m)*filter(n,m);
end
end
r(i,j)=sum(single(sum(temp)));
end
end
最佳答案
r
的大小我觉得应该和原来的一样。而且我不明白为什么要使用 single
转换为单精度。不管怎样,我想你想做以下事情:
%# Let's first create a small test image from the built-in peppers image
original = im2double(imread('peppers.png'));
original = original(1:5,1:8,1);
filter = 1/9 * [-1 -1 -1 ; -1 17 -1 ; -1 -1 -1];
s = size(original);
r = zeros(s);
for i = 2:s(1)-1
for j = 2:s(2)-1
temp = original(i-1:i+1,j-1:j+1) .* filter;
r(i,j) = sum(temp(:));
end
end
结果如下:
r =
0 0 0 0 0 0 0 0
0 0.2336 0.2157 0.2514 0.2436 0.2257 0.2344 0
0 0.2453 0.2444 0.2671 0.2693 0.2418 0.2240 0
0 0.2741 0.2728 0.2397 0.2505 0.2375 0.2436 0
0 0 0 0 0 0 0 0
使用imfilter
,它是:
r2 = imfilter(original, filter)
r2 =
0.3778 0.3325 0.3307 0.3442 0.3516 0.3312 0.3163 0.3856
0.3298 0.2336 0.2157 0.2514 0.2436 0.2257 0.2344 0.3386
0.3434 0.2453 0.2444 0.2671 0.2693 0.2418 0.2240 0.3512
0.3272 0.2741 0.2728 0.2397 0.2505 0.2375 0.2436 0.3643
0.3830 0.3181 0.3329 0.3403 0.3508 0.3272 0.3412 0.4035
如您所见,结果是相同的,除了边框上的那些。有一些策略可以计算边界上的那些,如将图像镜像到边界外,保持它们相同等。请阅读 imfilter
的文档。并选择一种策略。
请注意,我没有在此处翻转 filter
,因为过滤器在两个方向上都是对称的。我建议你避免循环!您的代码中有深度为 4 的嵌套循环!
最后,您可以使用二维卷积来执行与 imfilter
相同的操作:
r3 = conv2(original, filter, 'same');
r3 =
0.3778 0.3325 0.3307 0.3442 0.3516 0.3312 0.3163 0.3856
0.3298 0.2336 0.2157 0.2514 0.2436 0.2257 0.2344 0.3386
0.3434 0.2453 0.2444 0.2671 0.2693 0.2418 0.2240 0.3512
0.3272 0.2741 0.2728 0.2397 0.2505 0.2375 0.2436 0.3643
0.3830 0.3181 0.3329 0.3403 0.3508 0.3272 0.3412 0.4035
关于matlab - 在 matlab 中实现 IMFILTER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10672184/
我试图在不使用 imfilter 的情况下过滤图像。我应该得到与 imfilter 相同的结果,但我一直得到不同的结果。谁能告诉我哪里出错了? orignal=imread('obj6__17.png
我正在尝试使用imfilter而且,尽管升级到了 0.18.1 版本,我还是无法使用它: >>> import scipy >>> blurred_arr = scipy.imfilter(arr,
我使用这两个函数来查找刻度上的边缘。您有一个输入图像,您对输入图像应用 mask (例如 prewitt),并获得结果图片。 mypic = imread('examplepic.jpg') hy =
基于 this question和 this one我认为“imfilter”和“conv2”应该有相同的结果。但是试试这个代码你会看到不同之处。问题是什么? I = imread('tire.tif
h = fspecial('average', filterSize); imageData = imfilter(imageData, h, 'replicate'); 在我的 matlab 代码
我在 MATLAB 中有以下代码: I=imread(image); h=fspecial('gaussian',si,sigma); I=im2double(I); I=imfilter(I,h,'
我有一张原始图片: 然后我阅读它,创建一个 PSF,并在 Matlab 中对其进行模糊处理: lenawords1=imread('lenawords.bmp'); %create PSF sigma
我是一名优秀的程序员,十分优秀!