模糊图像如何

536(30天)
豪尔赫·奥尔蒂斯
豪尔赫·奥尔蒂斯 2019年3月16日
编辑: 为副总经理 2022年2月28日
编写一个函数 模糊 模糊了输入图像。要调用的函数是这样的:
输出=模糊(img, w);
在哪里 img 输入图像是一个二维矩阵的灰度像素值在0到255之间。模糊是由平均每个像素的像素值附近。具体来说,输出像素值的均值像素大小的正方形子矩阵 2 w + 1 在给定的像素位于中心。例如,如果 w 是1,那么我们使用3 x3矩阵,我们平均所有给定像素的相邻像素和本身。只有部分时使用有效像素的模糊矩阵超出图像。例如,相对应的模糊值 w = 1 在指数(1,1)元素的均值(1,1),(1、2),(2,1)和(2,2)输入 img 和输出 输出 的类型 uint8
你可以下载 测试图片在这里 在MATLAB环境下使用。
23日评论
Sana哈菲兹·
Sana哈菲兹· 2021年6月5日
非常感谢你

登录置评。

答案(13)

Dipesh Poudel
Dipesh Poudel 2020年4月9日
函数[输出]=模糊(w)
[行坳]=大小(一个);
= uint8 ();
B =南(大小(A) + (2 * w));
B (w + 1: end-w w + 1: end-w) =一个;
输出= 0 *;
我= w + 1:行+ w
j = w + 1:坳+ w
tmp = B(我:我+ w, j-w: j + w);
输出(我,j-w) =意味着(tmp (~ isnan (tmp)));
结束
结束
= uint8输出(输出);
6个评论
图像分析
图像分析 2021年2月11日
MyBlur()函数,它接受一个RGB图像需要调用imsplit(),()和打电话给你的模糊处理黑白图片:
函数blurredRGBImage = MyBlur (rgbImage windowWidth)
%分成单独的颜色通道。
[redChannel, greenChannel blueChannel] = imsplit (rgbImage);
每个颜色通道独立%模糊。
blurredR =模糊(redChannel windowWidth);
blurredG =模糊(greenChannel windowWidth);
blurredB =模糊(blueChannel windowWidth);
%重新组合成一个单一的RGB图像。
blurredRGBImage =猫(3 blurredR blurredG blurredB);
然后调用它:
rgbImage = imread (“peppers.png”);
blurredRGBImage = uint8 (MyBlur (rgbImage 9));
imshow (blurredRGBImage)

登录置评。


Yaksha SJ
Yaksha SJ 2020年5月10日
函数w =模糊(img)
%转换为双做计算
imgD =双(img);
(行,坳)= (img)大小;
= 0(行、坳);
2 = 1:行
jj = 1:坳
%得到子矩阵的指数
r1 = ii-w;
r2 = 2 + w;
c1 = jj-w;
c2 = jj + w;
%测试指数是有效的
%如果不是,设置为最小/最大,是有效的
如果r1 < 1
r1 = 1;
结束
如果r2 >行
r2 =行;
结束
如果c1 < 1
c1 = 1;
结束
如果c2 >坳
c2 =上校;
结束
%的子矩阵,并将平均分配给输出像素
m = imgD (r1, r2, c1, c2);
(二世,jj) =意味着(m (:));
结束
结束
%转换回uint8
= uint8(出);
结束
2的评论
8月阿加瓦尔
8月阿加瓦尔 2020年5月14日
编辑:8月阿加瓦尔 2020年5月14日
嘿,如果我产生这种变化的最后一段代码,我得到错误:
原始代码:
%的子矩阵,并将平均分配给输出像素
m = imgD (r1, r2, c1, c2);
(二世,jj) =意味着(m (:));
结束
结束
%转换回uint8
= uint8(出);
结束
修改代码:
%的子矩阵,并将平均分配给输出像素
m = imgD (r1, r2, c1, c2);
(二世,jj) = uint8(意味着(m (:)));在这里完成本身% % uint8转换
结束
结束
结束
错误的说 变量输出uint8必须的数据类型。目前双类型。
我是Matlab。我不能理解错误代码转换我的方式在改变。请帮助

登录置评。


KSSV
KSSV 2019年3月16日
编辑:KSSV 2019年3月16日
我= imread (“peppers.png”);
i = 1:3
我(:,:我)= uint8 (conv2(我(:,:我)的(20)/ 20 ^ 2,“相同”));
结束
imshow(我);
4评论
图像分析
图像分析 2020年6月23日
什么代码?豪尔赫或KSSV的吗?或者其他许多地方的代码出现在这个页面吗?

登录置评。


图像分析
图像分析 2019年3月16日
可以你的函数调用内置函数conv2()或imfilter () ?
如果没有,看,卷积和适应,我的附加手动程序。
2的评论
图像分析
图像分析 2019年3月22日
编辑:图像分析 2020年5月4日
您选择的解决方案不是很健壮,但它会工作 一些 情况下,并不是所有的情况下。

登录置评。


Jaimin Motavar
Jaimin Motavar 2019年7月4日
有人能帮我找出这个代码是错误的吗?
函数输出=模糊(img, w)
B =双(img);
[m, n] =大小(B);
w + k = 2 * 1;
i = 1: m
j = 1: n
p =我给(k / 2);
q = i +修复(k / 2);
r = j-fix (k / 2);
s = j +修复(k / 2);
如果p < 1
p = 1;
结束
如果q > m
q = m;
结束
如果r < 1
r = 1;
结束
如果s > n
s = n;
结束
A = B ((p, q) (r, s));
B (i, j) =意味着((:));
结束
结束
输出= uint8 (B);
结束
5个评论
沃尔特·罗伯森
沃尔特·罗伯森 2019年7月23日
你覆盖在B输入数据计算,所以你的计算是基于上述already-smoothed像素和左边上面的原始像素和左。

登录置评。


布兰登·麦克劳克林
布兰登·麦克劳克林 2019年7月22日
的帮助!我几乎完成了这门课程,但由于某些原因我不能实现这个函数。我我的代码都已经设置好了,但是它不停地说我做错了。我做错了什么?
函数输出=模糊(img, w)
img =双(img);
d = w * 2 + 1
s =大小(img)
输出= []
r = 1: d: (1)
行= [];
c = 1: d: s (2)
如果r + w < = s (1) & & c + w < = s (2) & & r w > = 1 & &北京市> = 1
合计=总和(总和(img ((r w): (r + w),(北京市):(c + w))));
val =合计/ (d * d);
nxt = 1 (d, d);
nxt(1: 1:末端)= val;
行=[行nxt];
elseifc + w < = s (2) & & r w > = 1 & &北京市> = 1
合计=总和(总和(img ((r w):最终,(北京市):(c + w))));
val =合计/ (d * (s (1) - r + w));
nxt = ((s (1) - r + w), d);
nxt(1: 1:末端)= val;
行=[行nxt];
elseifr + w < = s (1) & & r w > = 1 & &北京市> = 1
合计=总和(总和(img ((r w): (r + w),(北京市):结束)));
val =合计/ (d * (s (2) - c + w));
nxt = 1 (d (s (2) - c + w));
nxt(1: 1:末端)= val;
行=[行nxt];
elseifr + w < = s (1) & & c + w < = s (2) & & r w > = 1
合计=总和(总和(img ((r w): (r + w), 1: (c + w))));
val =合计/ (d * (c + w));
nxt = 1 (d (c + w));
nxt(1: 1:末端)= val;
行=[行nxt];
elseifr + w < = s (1) & & c + w < = s(2) & &北京市> = 1
合计=总和(总和(img (1: (r + w),(北京市):(c + w))));
val =合计/ (d * (r + w));
nxt的= ((r + w), d);
nxt(1: 1:末端)= val;
行=[行nxt];
elseifr + w < = s (1) & & c + w < = s (2)
合计=总和(总和(img (1: (r + w), 1: (c + w))));
val =合计/ ((r + w) * (c + w));
nxt = ((c + w), (r + w));
nxt(1: 1:末端)= val;
行=[行nxt];
elseifr w > = 1 & &北京市> = 1
合计=总和(总和(img ((r w):最终,(北京市):结束)));
val =合计/ ((s (1) - r + w) * (s (2) - c + w));
nxt = ((s (1) - r + w), (s (2) - c + w));
nxt(1: 1:末端)= val;
行=[行nxt];
elseifr + w < = s(1) & &北京市> = 1
合计=总和(总和(img (1: (r + w),(北京市):结束)));
val =合计/ ((r + w) * (s (2) - c + w));
nxt = ((r + w), (s (2) - c + w));
nxt(1: 1:末端)= val;
行=[行nxt];
elseifc + w < = s (2) & & r w > = 1
合计=总和(总和(img ((r w):最终,1:(c + w))));
val =合计/ ((s (1) - r + w) * (c + w));
nxt = ((s (1) - r + w), (c + w));
nxt(1: 1:末端)= val;
行=[行nxt];
结束
结束
输出=(输出;行);
结束
行= []
s2 =大小(输出)
如果s2 (1) < s (1)
c = 1: d: s (2)
如果c + w < = s(2) & &北京市> = 1
合计=总和(总和(img ((s2(1) + 1):(1),(北京市):(c + w))));
val =合计/ ((s (1) s2 (1)) * d);
nxt = ((s (1) s2 (1)), d);
nxt(1: 1:末端)= val;
行=[行nxt];
elseifc + w < = s (2)
合计=总和(总和(img ((s2 (1) + 1): (1), 1: (c + w))));
val =合计/ ((s (1) s2 (1)) * (c + w));
nxt = ((s (1) s2 (1)), (c + w));
nxt(1: 1:末端)= val;
行=[行nxt];
elseif北京市> = 1
合计=总和(总和(img ((s2(1) + 1):(1),(北京市):结束)));
val =合计/ ((s (1) s2 (1)) * (s2 (2) - c + w));
nxt = ((s (1) s2 (1)), (s2 (2) - c + w));
nxt(1: 1:末端)= val;
行=[行nxt];
结束
结束
输出=(输出;行);
结束
行= []
坳= []
s3 =大小(输出)
如果s3 (2) < s (2)
r = 1: d: (1)
如果r + w < = s (1) & & r w > = 1
合计=总和(总和(img ((r w): (r + w), (s3 (2) + 1): s (2))));
val =合计/ (d * (s (2) s3 (2)));
nxt = 1 (d (s (2) s3 (2)));
nxt(1: 1:末端)= val;
坳= (col; nxt);
elseifr + w < = s (1)
合计=总和(总和(img (1: (r + w), (s3 (2) + 1): s (2))));
val =合计/ ((r + w) * (s (2) s3 (2)));
nxt = ((r + w), (s (2) s3 (2)));
nxt(1: 1:末端)= val;
坳= (col; nxt);
elseifr w > = 1
合计=总和(总和(img ((r w): (r + w), (s3 (2) + 1): s (2))));
val =合计/ ((s3 (1) - r + w) * (s (2) s3 (2)));
nxt = ((s3 (1) - r + w) (s (2) s3 (2)));
nxt(1: 1:末端)= val;
坳= (col; nxt);
结束
结束
s4 =大小(col)
如果s4 (1) < s3 (1) | | s4 (1) < s (1)
合计=总和(总和(img ((s2 (1) + 1): (1), (2) + 1 (s3): s (2))));
val =合计/ ((s (1) s2 (1)) * (s (2) s3 (2)));
nxt = ((s (1) s2 (1)), (s (2) s3 (2)));
nxt(1: 1:末端)= val;
坳= (col; nxt);
结束
输出=[输出]上校;
结束
= uint8输出(输出);

图像分析
图像分析 2019年7月23日
看到我的手工卷积,附呈。

shreyansh pitroda
shreyansh pitroda 2020年4月29日
% %有人能找到什么是错误在这段代码中
函数[输出]=模糊(img, w)
img = uint8 (img);
[a, b] =大小(img);
输出= 0 (a, b);
h = 2 * w + 1;
我= 1:a
j = 1: b - h
值= img(我:张(h +), j: (h + j - 1));
输出(i, j) =意味着(价值(:));
结束
结束
= uint8输出(输出);
结束
6个评论
Sana哈菲兹·
Sana哈菲兹· 2021年6月5日
非常感谢! !

登录置评。


大卫·冈萨雷斯
大卫·冈萨雷斯 2020年5月25日
函数输出=模糊(img, w)
镜= 1 *的(大小(img) + 2 * w);
镜子(w + 1: end-w w + 1: end-w) = img;
输出= 0(大小(img));
2 = w + 1:尺寸(镜子,1)- w
jj = w + 1:尺寸(镜子,2)- w
子矩阵=镜子(ii-w: ii + w, jj-w: jj + w);
sum_values =总和(子矩阵(子矩阵> = 0));
有效=总和(子矩阵(:)> = 0);
输出(ii-w jj-w) = sum_values /有效;
结束
结束
= uint8输出(输出);

迪夫Ratna
迪夫Ratna 2020年5月25日
我自己搞懂了……
我知道它太长. .
函数w =模糊(img)
temp = img;
s =大小(img);
如果(1)> w & &年代(2)> w
% 1
i = 1: w
j = 1: w
临时(i, j) =(金额总和(img(1:我+ w、1: j + w))”) / ((i + w) * (j + w));
结束
结束
% 2
i = 1: w
j = w + 1: s (2) - w
临时(i, j) =(金额总和(img(1:我+ w, j-w: j + w))”) / ((i + w) * (w + w + 1);
结束
结束
% 3
i = 1: w
j = (2) - w + 1: s (2)
临时(i, j) =(金额总和(img(1:我+ w, j-w: s (2)))”) / ((i + w) * (s (2) - j + 1 + w));
结束
结束
% 4
我= w + 1: (1) - w
j = 1: w
临时(i, j) =(金额总和(img(我:我+ w、1: j + w))”) / ((w + w + 1) * (j + w));
结束
结束
% 5
我= w + 1: (1) - w
j = w + 1: s (2) - w
临时(i, j) =(金额总和(img(我:我+ w, j-w: j + w))”) / ((w + w + 1) * (w + w + 1);
结束
结束
% 6
我= w + 1: (1) - w
j = (2) - w + 1: s (2)
临时(i, j) =(金额总和(img(我:我+ w, j-w: s (2)))”) / ((w + w + 1) * (s (2) - j + 1 + w));
结束
结束
% 7
我= (1)- w + 1:年代(1)
j = 1: w
临时(i, j) =(金额总和(img(我:(1),1:j + w))”) / ((s (1) - i + 1 + w) * (j + w));
结束
结束
% 8
我= (1)- w + 1:年代(1)
j = w + 1: s (2) - w
临时(i, j) =(金额总和(img(我:(1),j-w: j + w))”) / ((s (1) - i + 1 + w) * (w + w + 1));
结束
结束
% 9
我= (1)- w + 1:年代(1)
j = (2) - w:年代(2)
临时(i, j) =(金额总和(img(我:(1),j-w: s (2)))”) / ((s (1) - i + 1 + w) * (s (2) - j + 1 + w));
结束
结束
结束
= temp;
结束
1评论
帕拉preethi
帕拉preethi 2021年1月22日
这不是工作

登录置评。


Chandrashekhar Dhangar
Chandrashekhar Dhangar 2020年7月16日
%可以有人请帮助呢?
% =错误变量输出不正确的值。
%测试5 x5 uint8矩阵与255年代的第一个和最后一个行和列和0其他地方和w = 1
函数输出=模糊(img, w)
[m, n] =大小(img);
我=双(img);
S = 0 (2 * w + 1, 2 * w + 1);
= 0 (m, n);
i = 1: m
j = 1: n
u = 1:2 * w + 1
v = 1:2 * w + 1
如果我> 0 & & j-w > 0 & &我+ u-1 < = m & & j-w +它们< = n
年代(u, v) = im(我+ u-1 j-w +它们);
其他的
S (u, v) = 0;
结束
结束
结束
(i, j) =和(S (:)) / (2 * w + 1) ^ 2;
结束
结束
输出= uint8(出);
结束
9日评论

登录置评。


aniket GIRI
aniket GIRI 2020年7月18日
编辑:为副总经理 2022年2月28日
函数w =模糊(img)
%转换为双做计算
imgD =双(img);
(行,坳)= (img)大小;
= 0(行、坳);
2 = 1:行
jj = 1:坳
%得到子矩阵的指数
r1 = ii-w;
r2 = 2 + w;
c1 = jj-w;
c2 = jj + w;
%测试指标是有效的%如果不是,设置为最小/最大,是有效的
如果1 < 1
r1 = 1;
结束
如果r2 >行
r2 =行;
结束
如果c1 < 1
c1 = 1;
结束
如果c2 >坳
c2 =上校;
结束
%的子矩阵,并将平均分配给输出像素
m = imgD (r1, r2, c1, c2);
(二世,jj) =意味着(m (:));
结束
结束
%转换回uint8
= uint8(出);
结束
4评论
图像分析
图像分析 2020年7月23日
如果行是1,那么row-w是零或消极。你不能从第一行开始,除非你检查的情况下,窗口会形象,在这种情况下,你不得不截断窗口。看到我的附加手动卷积。

登录置评。


Josh Yaksich
Josh Yaksich 2021年6月13日
编辑:Josh Yaksich 2021年6月13日
这是我所做的工作。请不要直接复制它,你只会伤害你自己。希望它能帮助在决定采取何种处理方式:
函数输出=模糊(img, w)
%保存img维度
y =大小(img, 1);
x =大小(img, 2);
%对修改复制img
imgdup = img;
%创建一个大矩阵的大小一样的形象加上一个边界
bsquare = 1 (y + 2 * w x + 2 * w) * 1;
%复制img内部更大的矩阵
bsquare ((w + 1):结束- w w + 1:结束- w) = img;
i = 1: y
j = 1: x
%进行少量个别像素矩阵及其周围的像素
pixelraw = bsquare([我:2 * w + i], [j: 2 * w + j]);
%计算平均值在小矩阵而忽略
pixelavg =意味着(pixelraw (pixelraw ~ = 1));
%复制单个像素的平均值复制图像
imgdup (i, j) = pixelavg;
结束
结束
%将重复的图像转换成unint8和分配输出
输出= uint8 (imgdup);

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的