用方程的话肯定输出不会和你的图完全一致
心形线方程如图
用上面行第二个比较简单,程序如下
#include <stdio.h>bool draw(float x, float y)
{
float a = x * x + y * y - 1.0
float b = x * x * y * 孝戚者y * y
return a * a * a - b <= 0
}
int main(int argc, char* argv[])
{
for (float y = 1.5 y >= -1.5 y -= 0.1)
{
for (float x = -1.2 x <= 1.2 x += 0.05)
{
if (draw(x, y))
{
bool left = draw(x - 0.05, y)
bool right = draw(x + 0.05, y)
bool up = draw(x, y + 0.1)
bool down = draw(x, y - 0.1)
if (left && right && up && down)
printf(" ")
else
printf("*")
}
else
printf(" ")
}
printf("\n")
}
return 0
}
draw函数是判断(x,y)坐标是否在心形范围内
主函数循环,y取值±1.5之间,步长0.1,x取值±1.2之间,步长0.05
如果(x,y)坐仔拦标在心形范围外打印空格
如果(x,y)坐标在心形范围内,由于这个心是空心的,要继续判断是不是心形边缘,判断周围4个点坐标,如果都在范围内,表示(x,y)坐标不会是边缘,打印空格,否则是边缘,打印星号
最终结果巧薯如图
g=imread('C:\Users\zhourui\Desktop\1.jpg') %读入图像的具体位置, k=imnoise(g,'gaussian',0.1)%图像去噪(高斯噪声) v=rgb2gray(k) %图像由rgb转为gray subplot(3,2,1) %当前图像显示在figure中的第一个(总共可以同时显示6个) imshow(g)%将原始图像显示在第一个(第一行第一个) title('orginal image')%figure中第一个图像的title subplot(3,2,2)%显示figure中的第二个(第一行第二个) imshow(v) %将去噪后的图像显示在figure中的第二个 title('noise image')%figure中第二个图的title [h,w]=size(v) %计算去噪图像的大小(h行数,wl为列数) n=9 %设定变量n=9 f=double(v)%将去噪图像v转为double型变量f a=ones(n,n)%变量a为一个n*n的矩阵,元素均为1 y=f %将f的值赋给y %每个元素的值改为9*9窗口的灰度均值 %即均值滤波,窗口大小为9*9 %均值滤波结果存储在y中 for i=1:h-n+1 for j=1:w-n+1 a=f(i:i+(n-1),j:j+(n-1)) s=sum(sum(a)) y(i+(n-1)/2,j+(n-1)/2)=s/(n*n) end end subplot(3,2,3)%显示figure中的第三个图像(第一行亮兄告第三个) imshow(uint8(y)) %显示均值滤波的结果 title('noise reduction by average filter')%均值滤波的title x=f%f赋值给x %每个元素的值改为9*9窗口的灰度大小的中间值 %即中值滤波,窗敬明口大小为9*9 %中值滤波结果存储在x中 for i=1:h-n+1 for j=1:w-n+1 c=f(i:i+(n-1),j:j+(n-1))e=c(1,:) for u=2:n e=[e,c(u,:)] end mm=median(e) x (i+(n-1)/2,j+(n-1)/2)=mm end end subplot(3,2,4)%显示figure中的第四个图像(尘镇第二行第一个) imshow(uint8(x))%显示中值滤波的结果 title('noise reduction by median filter')%中值滤波的title欢迎分享,转载请注明来源:内存溢出
评论列表(0条)