作者yanqinru (髍鵀)
看板C_and_CPP
标题[问题] BCB影像处理杂讯
时间Fri Apr 10 23:36:49 2009
各位板友好
小弟是刚学影像处理的新手
目前在研究杂讯程式碰到了许多问题
虽然有对照书本写的杂讯公式来看
可是还是不知道以下三段程式是怎麽做加入杂讯运算
首先是Impulse noise的部份
level值算是强度吗?那麽它有特定范围吗?
在这段程式里有写到pix = cp*x
cp是定义的色平面,那将它乘以x可以得到什麽?
再者是Gaussian noise
_
书本写高斯杂讯为p(z)=((1/2^0.5)*标准差)*e^(-(z-z)^2)/2*标准差^2
可是对照下面的程式
一开始定义的mean和sd是什麽?
然後在程式里的运算
sqrt12和sqrt10是代表什麽?是要再另外定义它成为某个数字还是???
我真的不太清楚这样的写法跟书本的公式有什麽关联性
如果有板友了解的话可以帮我解惑吗
最後是Uniform Noise的部份
一样是不清楚公式跟程式的关连性...
虽然说mean和sd是要输入的值
可是他们主要是代表控制什麽?
然後在回圈里的ran到sum3=...应该是在计算p(z)
可是我研究许久还是不懂到底程式是怎麽表达p(z)...
(Impulse Noise)
prob = StrToInt(Form11->Edit1->Text);
level = StrToInt(Form11->Edit2->Text);
randomize();
for (int y = 0;y < nBitmap->Height;y++)
{
aptr = (Byte*)nBitmap->ScanLine[y];
for (int x = 0;x < nBitmap->Width;x++)
if (random(100) <= prob)
{
pix1 = cp * x;
aptr[pix1] = (Byte)(aptr[pix1]+level);
aptr[pix1+1] = (Byte)(aptr[pix1+1]+level);
aptr[pix1+2] = (Byte)(aptr[pix1+2]+level);
}
}
(Gaussian Noise)
mean = StrToInt(Form11->Edit1->Text);
sd = StrToFloat(Form11->Edit2->Text);
//ShowMessage("Mean = "+IntToStr(mean)+",\nSD ="+FloatToStr(sd)+".");
randomize();
for (int y = 0;y < nBitmap->Height;y++)
{
aptr = (Byte*)nBitmap->ScanLine[y];
for (int x = 0;x < nBitmap->Width;x++)
{
total = 0.0;
for (int k = 0;k < 10;k++)
{
ran = (float)(random(100)+1) / 100;
total += (float)sqrt12 * sd * (ran - 0.5);
}
total /= (float)sqrt10;
total += (float)mean;
pix1 = cp * x;
sum1 = total+(float)aptr[pix1];
sum2 = total+(float)aptr[pix1+1];
sum3 = total+(float)aptr[pix1+2];
if (sum1 < 0.0) sum1 = 0.0;
if (sum2 < 0.0) sum2 = 0.0;
if (sum3 < 0.0) sum3 = 0.0;
aptr[pix1] = (Byte)(sum1);
aptr[pix1+1] = (Byte)(sum2);
aptr[pix1+2] = (Byte)(sum3);
}
}
(Uniform Noise)
mean = StrToInt(Form11->Edit1->Text);
sd = StrToFloat(Form11->Edit2->Text);
randomize();
for (int y = 0;y < nBitmap->Height;y++)
{
aptr = (Byte*)nBitmap->ScanLine[y];
for (int x = 0;x < nBitmap->Width;x++)
{
ran = (float)(random(100)+1) / 100;
total = ran - 0.5;
total *= (float)sqrt12;
total *= sd;
total += (float)mean;
pix1 = cp * x;
sum1 = total+(float)aptr[pix1];
sum2 = total+(float)aptr[pix1+1];
sum3 = total+(float)aptr[pix1+2];
if (sum1 < 0.0) sum1 = 0.0;
if (sum2 < 0.0) sum2 = 0.0;
if (sum3 < 0.0) sum3 = 0.0;
aptr[pix1] = (Byte)(sum1);
aptr[pix1+1] = (Byte)(sum2);
aptr[pix1+2] = (Byte)(sum3);
}
}
以上几个问题烦请板友帮小弟解惑
不好意思一次问太多问题了...
小弟仅能尽量以微薄的P币答谢回答问题的板友
感谢大家
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.74.245.166
1F:推 ainigi:你这些问题应该是影像处理,不是程式 04/10 23:52
2F:→ ainigi:给你一个提示,sqrt应该是mask resolution 04/10 23:53
3F:→ ainigi:再不懂,告诉你一个以一而贯之的原则,所有的去杂讯 04/10 23:54
4F:→ ainigi:都是用旁边来算中间,求得的直,都是你中央的去杂讯质 04/10 23:55
5F:→ yanqinru:如果只是想在图中加入杂讯 那麽sqrt是mask resolution吗? 04/11 00:09
6F:推 VictorTom:原po的问题是要如何在影像内加入杂讯........:) 04/11 00:32
7F:推 VictorTom:不是, 去杂讯和加入杂讯两者基本上用的方法不同.... 04/11 00:35
8F:→ VictorTom:我不知道你的code贴出来是你写的还是reference的.... 04/11 00:36
9F:→ VictorTom:但是mean应该是平均值, sd是标准差, 这两个值是产生其 04/11 00:36
10F:→ VictorTom:中一种杂讯会使用到的, 如果code是你写的应该不会不知. 04/11 00:37
11F:→ VictorTom:如果code是reference的找一下有没有作者注解或说明文件 04/11 00:37
12F:→ yanqinru:是reference的 我想先搞懂别人怎麽撰写 可是一直碰壁... 04/11 00:38
13F:→ VictorTom:找个有注解的看吧Orz 另外, 变数mean和sd这两个如果是看 04/11 00:39
14F:→ VictorTom:原文书的话, 应该要可以联想到是平均数与标准差啊XD 04/11 00:40
15F:→ yanqinru:因为没有注解 所以只能慢慢摸索 感谢a大和V大回我的问题 04/11 00:40
16F:→ yanqinru:嗯嗯 我认为那是平均数和标准差 但看程式的写法又不太懂 04/11 00:42
17F:推 VictorTom:不太确定是不是code不完整, sqrt##好像没交代怎麽来的.y 04/11 00:48
18F:→ yanqinru:对照公式後 sqrt我有想过是不是要自己定义某个值 04/11 00:55
19F:→ yanqinru:sqrt要怎麽定义我大概想通了...弄真久 04/11 02:51
20F:推 ainigi:果然想睡眼会昏,我没仔细看原po想去杂讯还是加杂讯 04/11 10:07
21F:→ ainigi:不过我研究的时候只需要去杂讯,加杂讯这都是上课作业 04/11 10:09
22F:→ ainigi:你上网查一下就一堆方法了,那些关键字高斯,impluse,uniform 04/11 10:10
23F:→ ainigi:方法都大同小异,只有计算会有不同,每个人想强调的地方不同 04/11 10:11
24F:→ ainigi:影像处里就是这样,重点是你要拿来做什麽 04/11 10:12